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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lil Crazy
5 / 5 / 1
Регистрация: 23.03.2009
Сообщений: 198
#1

Ошибка, связанная с массивами - C++

02.09.2009, 22:26. Просмотров 846. Ответов 19
Метки нет (Все метки)

Вот такой код для такой задачи: записать в массиве М количество положительных элементов каждого столбца матрицы A(K,L).
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int **ReadMatrixFromFile(int &K, int &L); 
int **CreateMatrix(const int K, const int L); 
void FreeMatrix(int **X, const int L); 
void CountPositiveElementsIn(int **X, const int K, const int L, int **A);
void PrintMatrix(int **X, const int K, const int L);
void WriteArrayToFile(int **A, const int K, const int L);
 
void main()
{  
    int K,L;
    printf("This program write the number of positive elemnts every row in array.\n");
    int **X=ReadMatrixFromFile(K,L);
    int **A=CreateMatrix(K,1);
    printf("Initial matrix:\n");
    PrintMatrix(X,K,L);
    CountPositiveElementsIn(X,K,L,A);
    printf("Result array:\n");
    PrintMatrix(A,K,1);
    WriteArrayToFile(X,K,1);
    FreeMatrix(X,K);
    FreeMatrix(A,K);
    printf("The program work is completed. For exiting press Enter.\n");
    getch();
}
 
void CountPositiveElementsIn(int **X, const int K, const int L, int **A)
{
    int i,j,z;
    for (i=0;i<K;i++)
    {
        for(j=0;j<L;j++)
        {
            if (X[i][j]>0)
            {
                A[z]++;
            }
        }
    }
}
 
void PrintMatrix(int **X, const int K, const int L)
{
    int i,j;
    for (i=0;i<K;i++)
    {
        for (j=0;j<L;j++)
        {
            printf("%5i",X[i][j]);
        }
        printf("\n");
    }
}
 
void FreeMatrix(int **X, const int K)
{
    int i;
    for(i=0; i<K; i++)
    {
        delete[] X[i];
    }
    delete[] X;
}
 
int **CreateMatrix(const int K,const int L)
{
    int i;
    int ** X = new int*[K];
    for(i=0; i<K; i++)
    {
         X[i] = new int[L];
    }
    return X;
}
 
void CheckingDimensionOfMatrix(const int K, const int L)
{
    if ((K<1) || (L<1)) 
    {
        printf("Matrix has the wrong dimension, that is less than unity. For exiting press Enter.\n");
        getch();
        exit(1);
    }
}
 
int **ReadMatrixFromFile(int &K, int &L)
{
    FILE *InputFile;
    char PathIn[25];
    int i,j;
    printf("Enter a path for input file: ");
    scanf("%s",PathIn); 
    if ((InputFile=fopen(PathIn, "r")) == NULL )
    {
        perror(PathIn);
        exit;
    }
    fscanf(InputFile,"%d ",&K);
    fscanf(InputFile,"%d ",&L);
    CheckingDimensionOfMatrix(K,L);
    int ** X=CreateMatrix(K,L); 
    for (i=0;i<K;i++)
    {
         for (j=0;j<L;j++)
            fscanf (InputFile,"%d ",&X[i][j]);
    }
    fclose(InputFile); 
    return X;
}
 
void WriteMatrixToFile(int **X, const int K, const int L)
{
    int i,j;
    FILE *OutputFile;
    char PathOut[25];
    printf("Enter a path for output result file: ");
    scanf("%s",PathOut);  
    OutputFile=fopen(PathOut,"w+");
    for (i=0;i<K;i++)
    {
        for (j=0;j<L;j++)
        {
            fprintf(OutputFile,"%4d",X[i][j]);
        }
        fprintf(OutputFile,"\n");
    }
    fclose(OutputFile); 
}
Причём даже не знаю верно ли решение задачи...
А ошибки компилятор выдаёт такие:
Ошибка 12 error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl WriteArrayToFile(int * *,int,int)" (?WriteArrayToFile@@YAXPAPAHHH@Z) в функции _main KKR.obj KKR
Ошибка 13 fatal error LNK1120: 1 неразрешенных внешних элементов F:\Документы\Политех\Программирование\Курсач\B KKR
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
02.09.2009, 23:01     Ошибка, связанная с массивами #2
C++
1
void WriteArrayToFile(int **A, const int K, const int L);
тело функции где?
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
02.09.2009, 23:07     Ошибка, связанная с массивами #3
zim22, я так подозреваю, что вот
C++
1
void WriteMatrixToFile(int **X, const int K, const int L)
только ТС в названиях запутался

Вот
так
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int **ReadMatrixFromFile(int &K, int &L); 
int **CreateMatrix(const int K, const int L); 
void FreeMatrix(int **X, const int L); 
void CountPositiveElementsIn(int **X, const int K, const int L, int **A);
void PrintMatrix(int **X, const int K, const int L);
void WriteMatrixToFile(int **A, const int K, const int L);
 
void main()
{  
        int K,L;
    printf("This program write the number of positive elemnts every row in array.\n");
        int **X=ReadMatrixFromFile(K,L);
        int **A=CreateMatrix(K,1);
    printf("Initial matrix:\n");
    PrintMatrix(X,K,L);
    CountPositiveElementsIn(X,K,L,A);
    printf("Result array:\n");
        PrintMatrix(A,K,1);
    WriteArrayToFile(X,K,1);
        FreeMatrix(X,K);
        FreeMatrix(A,K);
        printf("The program work is completed. For exiting press Enter.\n");
        getch();
}
 
void CountPositiveElementsIn(int **X, const int K, const int L, int **A)
{
        int i,j,z;
        for (i=0;i<K;i++)
        {
        for(j=0;j<L;j++)
                {
                        if (X[i][j]>0)
                        {
                                A[z]++;
                        }
                }
        }
}
 
void PrintMatrix(int **X, const int K, const int L)
{
        int i,j;
        for (i=0;i<K;i++)
        {
                for (j=0;j<L;j++)
                {
                        printf("%5i",X[i][j]);
                }
                printf("\n");
        }
}
 
void FreeMatrix(int **X, const int K)
{
        int i;
        for(i=0; i<K; i++)
        {
                delete[] X[i];
        }
        delete[] X;
}
 
int **CreateMatrix(const int K,const int L)
{
        int i;
        int ** X = new int*[K];
    for(i=0; i<K; i++)
        {
         X[i] = new int[L];
        }
        return X;
}
 
void CheckingDimensionOfMatrix(const int K, const int L)
{
        if ((K<1) || (L<1)) 
        {
                printf("Matrix has the wrong dimension, that is less than unity. For exiting press Enter.\n");
                getch();
                exit(1);
        }
}
 
int **ReadMatrixFromFile(int &K, int &L)
{
        FILE *InputFile;
        char PathIn[25];
        int i,j;
        printf("Enter a path for input file: ");
    scanf("%s",PathIn); 
        if ((InputFile=fopen(PathIn, "r")) == NULL )
        {
                perror(PathIn);
                exit;
        }
        fscanf(InputFile,"%d ",&K);
    fscanf(InputFile,"%d ",&L);
        CheckingDimensionOfMatrix(K,L);
        int ** X=CreateMatrix(K,L); 
        for (i=0;i<K;i++)
        {
         for (j=0;j<L;j++)
            fscanf (InputFile,"%d ",&X[i][j]);
        }
        fclose(InputFile); 
        return X;
}
 
void WriteMatrixToFile(int **X, const int K, const int L)
{
        int i,j;
        FILE *OutputFile;
        char PathOut[25];
        printf("Enter a path for output result file: ");
    scanf("%s",PathOut);  
    OutputFile=fopen(PathOut,"w+");
        for (i=0;i<K;i++)
        {
        for (j=0;j<L;j++)
                {
                        fprintf(OutputFile,"%4d",X[i][j]);
                }
                fprintf(OutputFile,"\n");
        }
        fclose(OutputFile);     
}
должно работать
Lil Crazy
5 / 5 / 1
Регистрация: 23.03.2009
Сообщений: 198
02.09.2009, 23:14  [ТС]     Ошибка, связанная с массивами #4
О да, точно) Но не работает моя обработка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void CountPositiveElementsIn(int **X, const int K, const int L, int **A)
{
        int i,j,z;
        for (i=0;i<K;i++)
        {
        for(j=0;j<L;j++)
                {
                        if (X[i][j]>0)
                        {
                                A[z]++;
                        }
                }
        }
}
Подскажите плиз как это надо сделать
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
02.09.2009, 23:19     Ошибка, связанная с массивами #5
в 3 строке z присвой необходимое значение
Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
03.09.2009, 00:54     Ошибка, связанная с массивами #6
A[z]++; меня настораживает при том что:
int **A;
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
03.09.2009, 01:00     Ошибка, связанная с массивами #7
Mozart, а это не будет тебя настараживать?
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main()
{
    int n = 5;
    int *A = new int[n];
 
    for (int i=0; i<n; i++, A++)
        *A = i;
 
    A -= n;
 
    for (int i=0; i<n; i++, A++)
        cout << *A << " ";
    cout << endl;
 
    A -= n;
    delete[] A;
    return 0;
}
snake32
1354 / 997 / 129
Регистрация: 26.02.2009
Сообщений: 3,660
Записей в блоге: 5
03.09.2009, 04:09     Ошибка, связанная с массивами #8
Monte-Cristo, код работать по идеи должен
Вывод: 0 1 2 3 4
но вот если забудешь перед delete[] A; поставить A -= n; что тогда высвободится??
Я бы так не рискнул бы делать
ISergey
Maniac
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
03.09.2009, 04:38     Ошибка, связанная с массивами #9
Цитата Сообщение от snake32 Посмотреть сообщение
но вот если забудешь перед delete[] A; поставить A -= n; что тогда высвободится??
ни че хорошего..
Я бы так не рискнул бы делать
Можно так
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
#include <iostream>
 
struct Emloyee{
    Emloyee(){ 
        std::cout << "Emloyee()" << std::endl;
    }
    ~Emloyee(){ 
        std::cout << "~Emloyee()" << std::endl;
    }
};
 
int main()
{
    Emloyee *arr = new Emloyee[10];
 
    Emloyee *it_begin   = arr;
    Emloyee *it_end     = arr + 10;
 
    int i = 0;
    for(; it_begin != it_end; ++it_begin)
        std::cout << i++ << " ";
    std::cout << '\n';
 
    delete[] arr;
    return 0;
}
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
03.09.2009, 08:42     Ошибка, связанная с массивами #10
Я так подозреваю, что функция CountPositiveElementsIn должна выглядеть
вот так
C++
1
2
3
4
5
6
7
8
void CountPositiveElementsIn(int **X, const int K, const int L, int **A)
{
        int i,j;
        for (i=0;i<K;i++)
                for(j=0;j<L;j++)
                        if (X[i][j]>0)
                                A[i]++;
}
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
03.09.2009, 10:08     Ошибка, связанная с массивами #11
Цитата Сообщение от snake32 Посмотреть сообщение
что тогда высвободится??
ничего хорошого.

Цитата Сообщение от snake32 Посмотреть сообщение
Я бы так не рискнул бы делать
рискнул, не рескнул -- это уже дело каждого. я такую запись встречал в некоторых книгах.
snake32
1354 / 997 / 129
Регистрация: 26.02.2009
Сообщений: 3,660
Записей в блоге: 5
03.09.2009, 14:59     Ошибка, связанная с массивами #12
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
я такую запись встречал в некоторых книгах.
Надеюсь в этих книгах так же сказано что злоупотреблять этим не стоит, это так, чисто для примера работа арифметических операций над указателями.
Lil Crazy
5 / 5 / 1
Регистрация: 23.03.2009
Сообщений: 198
03.09.2009, 19:44  [ТС]     Ошибка, связанная с массивами #13
Вот в итоге такой код:
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int **ReadMatrixFromFile(int &K, int &L); 
int **CreateMatrix(const int K, const int L); 
void FreeMatrix(int **X, const int L); 
void CountPositiveElementsIn(int **X, const int K, const int L, int **A);
void PrintMatrix(int **X, const int K, const int L);
void WriteArrayToFile(int **A, const int K, const int L);
 
void main()
{  
    int K,L;
    printf("This program write the number of positive elemnts every row in array.\n");
    int **X=ReadMatrixFromFile(K,L);
    int **A=CreateMatrix(K,1);
    printf("Initial matrix:\n");
    PrintMatrix(X,K,L);
    CountPositiveElementsIn(X,K,L,A);
    printf("Result array:\n");
    PrintMatrix(A,K,1);
    WriteArrayToFile(A,K,1);
    FreeMatrix(X,K);
    FreeMatrix(A,K);
    printf("The program work is completed. For exiting press Enter.\n");
    getch();
}
 
void CountPositiveElementsIn(int **X, const int K, const int L, int **A)
{
    int i,j;
    for (i=0;i<K;i++)
        for(j=0;j<L;j++)
            if (X[i][j]>0)
                A[i]++;
}
 
void PrintMatrix(int **X, const int K, const int L)
{
    int i,j;
    for (i=0;i<K;i++)
    {
        for (j=0;j<L;j++)
        {
            printf("%5i",X[i][j]);
        }
        printf("\n");
    }
}
 
void FreeMatrix(int **X, const int K)
{
    int i;
    for(i=0; i<K; i++)
    {
        delete[] X[i];
    }
    delete[] X;
}
 
int **CreateMatrix(const int K,const int L)
{
    int i;
    int ** X = new int*[K];
    for(i=0; i<K; i++)
    {
         X[i] = new int[L];
    }
    return X;
}
 
void CheckingDimensionOfMatrix(const int K, const int L)
{
    if ((K<1) || (L<1)) 
    {
        printf("Matrix has the wrong dimension, that is less than unity. For exiting press Enter.\n");
        getch();
        exit(1);
    }
}
 
int **ReadMatrixFromFile(int &K, int &L)
{
    FILE *InputFile;
    char PathIn[25];
    int i,j;
    printf("Enter a path for input file: ");
    scanf("%s",PathIn); 
    if ((InputFile=fopen(PathIn, "r")) == NULL )
    {
        perror(PathIn);
        exit;
    }
    fscanf(InputFile,"%d ",&K);
    fscanf(InputFile,"%d ",&L);
    CheckingDimensionOfMatrix(K,L);
    int ** X=CreateMatrix(K,L); 
    for (i=0;i<K;i++)
    {
         for (j=0;j<L;j++)
            fscanf (InputFile,"%d ",&X[i][j]);
    }
    fclose(InputFile); 
    return X;
}
 
void WriteArrayToFile(int **X, const int K, const int L)
{
    int i,j;
    FILE *OutputFile;
    char PathOut[25];
    printf("Enter a path for output result file: ");
    scanf("%s",PathOut);  
    OutputFile=fopen(PathOut,"w+");
    for (i=0;i<K;i++)
    {
        for (j=0;j<L;j++)
        {
            fprintf(OutputFile,"%4d",X[i][j]);
        }
        fprintf(OutputFile,"\n");
    }
    fclose(OutputFile); 
}
Не работает моя функция подсчёта CountPositiveElementsIn и неверно освобождается память Подскажите плиз
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
03.09.2009, 20:08     Ошибка, связанная с массивами #14
а так
C
1
2
3
4
5
6
7
8
9
10
11
void CountPositiveElementsIn(int **X, const int K, const int L, int **A)
{
        int i,j;
        for (i=0;i<K;i++)
        {
                A[i] = 0;
                for(j=0;j<L;j++)
                        if (X[i][j]>0)
                                A[i]++;
        }
}

Цитата Сообщение от Lil Crazy Посмотреть сообщение
неверно освобождается память
С чего ты такое взял?
Lil Crazy
5 / 5 / 1
Регистрация: 23.03.2009
Сообщений: 198
03.09.2009, 20:31  [ТС]     Ошибка, связанная с массивами #15
Цитата Сообщение от M128K145 Посмотреть сообщение
а так
C
1
2
3
4
5
6
7
8
9
10
11
void CountPositiveElementsIn(int **X, const int K, const int L, int **A)
{
        int i,j;
        for (i=0;i<K;i++)
        {
                A[i] = 0;
                for(j=0;j<L;j++)
                        if (X[i][j]>0)
                                A[i]++;
        }
}

С чего ты такое взял?
Если так, то программа виснет и всё( Необработанное исключение
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
03.09.2009, 20:48     Ошибка, связанная с массивами #16
Цитата Сообщение от snake32 Посмотреть сообщение
Надеюсь в этих книгах так же сказано что злоупотреблять этим не стоит, это так, чисто для примера работа арифметических операций над указателями.
не сказано. а какая разница? если ты пишешь так - то ты обязан не допускать ошибок. это лично дело каждого как писать. просто разный стиль.
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
03.09.2009, 20:57     Ошибка, связанная с массивами #17
Lil Crazy, кинь файл из которого считываеш данные, я попробую все-таки ее откомпилировать
Lil Crazy
5 / 5 / 1
Регистрация: 23.03.2009
Сообщений: 198
03.09.2009, 22:50  [ТС]     Ошибка, связанная с массивами #18
Цитата Сообщение от M128K145 Посмотреть сообщение
Lil Crazy, кинь файл из которого считываеш данные, я попробую все-таки ее откомпилировать
прошу http://www.rapidshare.ru/1157962

Добавлено через 1 час 41 минуту
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
03.09.2009, 22:57     Ошибка, связанная с массивами #19
Цитата Сообщение от M128K145 Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
void CountPositiveElementsIn(int **X, const int K, const int L, int **A)
{
        int i,j;
        for (i=0;i<K;i++)
        {
                A[i] = 0;
                for(j=0;j<L;j++)
                        if (X[i][j]>0)
                                A[i]++;
        }
}
Если я правильно понял, один из массивов всё-таки должен одномерным быть. То есть
C
1
2
void CountPositiveElementsIn(int **X, const int K, const int L, int *A){
    ...
При чём то, что через A передаётся, должно как-то вот так быть объявлено:
C
1
int Positive_row_values_summ[K];
ну или ... new Int (как там в c++ массивы создаются?).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2009, 23:36     Ошибка, связанная с массивами
Еще ссылки по теме:

C++ Ошибка, связанная с переполнением буфера
Ошибка в коде (работа с массивами) C++
Редкая ошибка, связанная с переполнением стека C++
Ошибка связанная с Динамическим массивом C++
Ошибка, связанная со статическим членом класса C++

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

Или воспользуйтесь поиском по форуму:
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
03.09.2009, 23:36     Ошибка, связанная с массивами #20
вот работающий
код
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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
 
int **ReadMatrixFromFile(int &K, int &L); 
int **CreateMatrix(const int K, const int L); 
void FreeMatrix(int **X, const int L); 
void CountPositiveElementsIn(int **X, const int K, const int L, int **A);
void PrintMatrix(int **X, const int K, const int L);
void WriteArrayToFile(int **A, const int K, const int L);
 
void main()
{  
    int K,L;
    printf("This program write the number of positive elemnts every row in array.\n");
    int **X=ReadMatrixFromFile(K,L);
    int **A=CreateMatrix(K,1);
    printf("\nInitial matrix:\n");
    PrintMatrix(X,K,L);
    CountPositiveElementsIn(X,K,L,A);
    printf("\nResult array:\n");
    PrintMatrix(A,K,1);
    WriteArrayToFile(A,K,1);
    FreeMatrix(X,K);
    FreeMatrix(A,K);
    printf("\nThe program work is completed. For exiting press Enter.\n");
    _getch();
}
 
void CountPositiveElementsIn(int **X, const int K, const int L, int **A)
{
    int i,j;
    for (i=0;i<K;i++)
        for(j = 0;j < L; j++)
            if (X[i][j]>0)
                A[i][0]++;
}
 
void PrintMatrix(int **X, const int K, const int L)
{
    int i,j;
    for (i=0;i<K;i++)
    {
        for (j=0;j<L;j++)
            printf("%5i",X[i][j]);
        printf("\n");
    }
}
 
void FreeMatrix(int **X, const int K)
{
    int i;
    for(i=0; i<K; i++)
        delete[] X[i];
    delete[] X;
}
 
int **CreateMatrix(const int K,const int L)
{
    int i;
    int ** X = new int*[K];
    for(i=0; i<K; i++)
    {   
        X[i] = new int[L];
        *X[i] = 0;
    }
    return X;
}
 
void CheckingDimensionOfMatrix(const int K, const int L)
{
    if ((K<1) || (L<1)) 
    {
        printf("Matrix has the wrong dimension, that is less than unity. For exiting press Enter.\n");
        _getch();
        exit(1);
    }
}
 
int **ReadMatrixFromFile(int &K, int &L)
{
    FILE *InputFile;
    char PathIn[25];
    int i,j;
    printf("Enter a path for input file: ");
    scanf_s("%s",PathIn); 
    if ((InputFile=fopen(PathIn, "r")) == NULL )
    {
        perror(PathIn);
        exit(1);
    }
    fscanf_s(InputFile,"%d ",&K);
    fscanf_s(InputFile,"%d ",&L);
    CheckingDimensionOfMatrix(K,L);
    int ** X=CreateMatrix(K,L); 
    for (i=0;i<K;i++)
        for (j=0;j<L;j++)
            fscanf_s(InputFile,"%d ",&X[i][j]);
    fclose(InputFile); 
    return X;
}
 
void WriteArrayToFile(int **X, const int K, const int L)
{
    int i,j;
    FILE *OutputFile;
    char PathOut[25];
    printf("Enter a path for output result file: ");
    scanf_s("%s",PathOut);  
    OutputFile=fopen(PathOut,"w+");
    for (i=0;i<K;i++)
    {
        for (j=0;j<L;j++)
            fprintf(OutputFile,"%4d",X[i][j]);
        fprintf(OutputFile,"\n");
    }
    fclose(OutputFile);     
}
Yandex
Объявления
03.09.2009, 23:36     Ошибка, связанная с массивами
Ответ Создать тему
Опции темы

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