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

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

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

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

02.09.2009, 22:26. Просмотров 887. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2009, 22:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка, связанная с массивами (C++):

Задача связанная с символьными массивами и функциями - C++
Добрый день Помогите пожалуйста с этой задачей никак не выходит у меня. Заранее спасибою Написать функцию, которая проверяет...

Ошибка связанная с string - C++
Не выполняется условие,хотя указываю всё верно.Возможно из-за того,что в условие идёт равно ==,а не при =,но при = мне пишут ошибку...

Ошибка связанная с Динамическим массивом - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; int main() { using namespace std; char * ch = new char; cin &gt;&gt; ch; for (int i = 1; i...

Ошибка, связанная с переполнением буфера - C++
В общем, данный код рабочий, собираю на VS2013, при компиляции выдает переполнение буфера. Другие люди пробовали собирать у себя, у них всё...

Ошибка в функции, связанная с использованием памяти - C++
Все доброго времени суток. Помогите, пожалуйста, найти ошибку в моей функции: #include &lt;wchar.h&gt; #include &quot;functions.h&quot; // файл...

Редкая ошибка, связанная с переполнением стека - C++
Значит ситуация такая, вот весь код он полностью рабочий, но для перегрузки потокового ввода вылетает и пишет, что стек переполнен. Сколько...

19
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);
тело функции где?
0
M128K145
Эксперт С++
8299 / 3519 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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);     
}
должно работать
0
Lil Crazy
6 / 6 / 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]++;
                        }
                }
        }
}
Подскажите плиз как это надо сделать
0
M128K145
Эксперт С++
8299 / 3519 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
02.09.2009, 23:19 #5
в 3 строке z присвой необходимое значение
0
Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
03.09.2009, 00:54 #6
A[z]++; меня настораживает при том что:
int **A;
0
Monte-Cristo
2790 / 1376 / 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;
}
0
snake32
1492 / 1056 / 152
Регистрация: 26.02.2009
Сообщений: 3,937
Записей в блоге: 5
03.09.2009, 04:09 #8
Monte-Cristo, код работать по идеи должен
Вывод: 0 1 2 3 4
но вот если забудешь перед delete[] A; поставить A -= n; что тогда высвободится??
Я бы так не рискнул бы делать
0
ISergey
Maniac
Эксперт С++
1395 / 906 / 56
Регистрация: 02.01.2009
Сообщений: 2,706
Записей в блоге: 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;
}
0
M128K145
Эксперт С++
8299 / 3519 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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]++;
}
0
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
03.09.2009, 10:08 #11
Цитата Сообщение от snake32 Посмотреть сообщение
что тогда высвободится??
ничего хорошого.

Цитата Сообщение от snake32 Посмотреть сообщение
Я бы так не рискнул бы делать
рискнул, не рескнул -- это уже дело каждого. я такую запись встречал в некоторых книгах.
0
snake32
1492 / 1056 / 152
Регистрация: 26.02.2009
Сообщений: 3,937
Записей в блоге: 5
03.09.2009, 14:59 #12
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
я такую запись встречал в некоторых книгах.
Надеюсь в этих книгах так же сказано что злоупотреблять этим не стоит, это так, чисто для примера работа арифметических операций над указателями.
0
Lil Crazy
6 / 6 / 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 и неверно освобождается память Подскажите плиз
0
M128K145
Эксперт С++
8299 / 3519 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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 Посмотреть сообщение
неверно освобождается память
С чего ты такое взял?
0
Lil Crazy
6 / 6 / 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]++;
        }
}

С чего ты такое взял?
Если так, то программа виснет и всё( Необработанное исключение
0
03.09.2009, 20:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2009, 20:31
Привет! Вот еще темы с ответами:

Ошибка, связанная со статическим членом класса - C++
Есть код: class Foo{ public: static void f(); int a; }; void Foo::f(){ std::cin &gt;&gt; a; }

Ошибка с массивами - C++
Доброго времени суток. Пишу игру двадцать одно очко. Возникли проблемы с массивами. Есть класс, где хранятся: названия карт, значения карт,...

Задачи с массивами (Ошибка) - C++
Ребят, учусь на первом курсе, экзамен по программированию..задача на массивы двумерном массиве 8х10 поменять местами левую верхнюю...

Ошибка в коде (работа с массивами) - C++
помогите исправить ошибку в коде немогу понять в чем проблема #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;limits&gt; #include...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.