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

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

Войти
Регистрация
Восстановить пароль
 
Oksana_Ksu
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 20
#1

Indefenid Direction (не пойму ошибки) - C++

23.05.2009, 08:05. Просмотров 640. Ответов 12
Метки нет (Все метки)

Здраствуйте,дорогие форумчане)))
Подскажите пожалуйста,я в главной процедуре main вызываю функцию после определения и заполнения массивов:

//Первый массив
double *Massiv_for_Diagonal;
Massiv_for_Diagonal = new double [strok];

cout << "\nThis is vector of main diagonal's elements:\n";

for (int i=0;i<strok;i++){
Massiv_for_Diagonal[i] = UkasNaMassiv[i][i];
cout<< "\t" << Massiv_for_Diagonal[i];
}

//Второй массив
double *Massiv_for_Obr_Diagonal;
Massiv_for_Obr_Diagonal = new double [strok];

cout << "\nthis is vector of elements that return values elemens of main diagonal's elements:\n";

for (int i=0;i<strok;i++) {
if (Massiv_for_Diagonal[i]==0)
Massiv_for_Obr_Diagonal[i] = 0.0;
else
Massiv_for_Obr_Diagonal[i] = 1/Massiv_for_Diagonal[i];
cout<< "\t" << Massiv_for_Obr_Diagonal[i];
}

//Третий массив
double *Result_Matrix;
Result_Matrix = new double [strok];

for (int str=0;str<strok;str++)
Result_Matrix[str] = 0.0;
//Вызываемая функция,кот.написана до функции main()
Umnogenie_matrix(Massiv_for_Diagonal,1,Massiv_for_Obr_Diagonal,strok,Result_Matrix,strok);




//Вот сама функция Umnogenie_matrix

void Umnogenie_matrix(double *A,const int i,double *B,const int j,double *C,const int size) {

double x,y,z;

for (int str=0;str<i;str++)
for (int stol=0;stol<j;stol++)
for (int step=0;step<size;step++) {
// x = C[str][stol]; //здесь я пробывала так - ошибка
x = *(C+str+stol); //потом исправила на так,но по-моему неправильно
//y = A[str][step]; //вот отсюда начинает ругаться компилятор
y = *(A+str+step);
z = B[step][str];
//C[str][stol] = C[str][stol] + (A[str][step]) * (B[step][str]);
C[str][stol] = x + y;
}
}

//Компилятор ругается: Indefined Direction

Помогите,плиз!!!Не пойму в чем дело((((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
23.05.2009, 08:34     Indefenid Direction (не пойму ошибки) #2
Скопируй код полностью. Либо опиши в какой именно строке ошибку(и) выдает!!
Выдели строку с помощью цитаты или подсветки кода С++
Oksana_Ksu
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 20
23.05.2009, 09:07  [ТС]     Indefenid Direction (не пойму ошибки) #3
void Umnogenie_matrix(double *A,const int i,double *B,const int j,double *C,const int size) {

double x,y,z;

for (int str=0;str<i;str++)
for (int stol=0;stol<j;stol++)
for (int step=0;step<size;step++) {
// x = C[str][stol]; //здесь я пробывала так - ошибка
x = *(C+str+stol); //потом исправила на так,но по-моему неправильно
//y = A[str][step]; //вот отсюда начинает ругаться компилятор
y = *(A+str+step);
z = B[step][str];
//C[str][stol] = C[str][stol] + (A[str][step]) * (B[step][str]);
C[str][stol] = x + y;
}
}

ff - ругается на эти строки на первую квадратную скобку
Undefined Direction

Добавлено через 48 секунд
Может потому что у меня массивы не двумерные, я хотела просто универсальную функцию сделать
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
23.05.2009, 09:31     Indefenid Direction (не пойму ошибки) #4
начнем с того, что B - это указатель на тип double... и как следствие, возможен указатель лишь на одномерный массив, а в коде вы используете его как двумерный
аналогично и с C
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
23.05.2009, 09:31     Indefenid Direction (не пойму ошибки) #5
Мне кажется ошибка в том, что ты объявила трехмерный массив (это только догадка), с ними я никогда не работал.
Цитата Сообщение от Oksana_Ksu Посмотреть сообщение
for (int str=0;str<i;str++)
for (int stol=0;stol<j;stol++)
for (int step=0;step<size;step++) {
А может ты само задание напишешь?
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
23.05.2009, 09:32     Indefenid Direction (не пойму ошибки) #6
B и C - у вас одномерные массивы или двумерные? и что вы хотели этими строчками реализовать?
Oksana_Ksu
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 20
23.05.2009, 09:57  [ТС]     Indefenid Direction (не пойму ошибки) #7
Я хотела реализовать следующее.
В главной процедуре я формирую 2 одномерных массива.мне нужно затем эти два массива перемножить как матрицы(1 массив - как матрица с одним столбцом,а другой массив - как матрица с одной строкой) - в итоге получается одно число(это по правилам математики)

Но мне нужно сделать функцию перемножение матриц,только универсальную.То есть,могут быть и не одномерные массивы,а двумерные.
В итоге должен получится Массив(матрица),кот.содержит количество строк первого массива и количество столбцов второго массива(по правилам математики)

вот я после формирования 2 массивов(они у меня пока одномерные) в главной функции создаю еще один массив Result_Matrix кот,у меня получится в результате перемножения первоначальных 2 массивов(кот.у меня одномерные,пока)

Для начала я Result_Matrix задаю всем элементам начальные значение 0.0, чтобы можно было сразу прибавлять в функции Umnogenie_Matrix

Вот так,спасибо всем за помощь,я попробую поменять С и В на другие имена)))))
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
23.05.2009, 10:10     Indefenid Direction (не пойму ошибки) #8
Если я все верно понял, нужно матрицу А умножить на матрицу В
А не проще просто тупо взять одну и вторую матрицу и перемножить их, перевернув вторую, и всё
По правилам мат-ки, всё верно написал? Просто не помню как они перемножаются))
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
23.05.2009, 10:13     Indefenid Direction (не пойму ошибки) #9
то есть, вам нужна функция, которая перемножает матрицы?

Цитата Сообщение от Oksana_Ksu Посмотреть сообщение
Вот так,спасибо всем за помощь,я попробую поменять С и В на другие имена)))))
смена имени, не приведет к успеху. необходимо менять тип.
Oksana_Ksu
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 20
23.05.2009, 10:28  [ТС]     Indefenid Direction (не пойму ошибки) #10
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
то есть, вам нужна функция, которая перемножает матрицы?


смена имени, не приведет к успеху. необходимо менять тип.
Почему тип нужно менять?Не пойму...

Добавлено через 3 минуты 56 секунд
Цитата Сообщение от uto Посмотреть сообщение
Если я все верно понял, нужно матрицу А умножить на матрицу В
А не проще просто тупо взять одну и вторую матрицу и перемножить их, перевернув вторую, и всё
По правилам мат-ки, всё верно написал? Просто не помню как они перемножаются))
Если в матрицу В помещать результат умножения А на В,то так не получиться,перезаписав например первый элемент,его старое значение нам понадобиться для последущего формирования других элементов....

Добавлено через 3 минуты 14 секунд
А,я поняла с типом!!!!
А как тогда сделать,чтобы функция была и для одномерного и для двухмерного массива?
*(С+str+stol) - так нельзя,только там нужно наверно что-то сделать с sizeof(double) чтобы он адрес указателя менялся на величину double
Как сделать?
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
23.05.2009, 10:41     Indefenid Direction (не пойму ошибки) #11
потому что, матрица, как правило, создается так:

C++
1
2
double** Matr = new double*[m]; // m - кол-во строк
for (int i=0; i<m; i++) Matr[i] = new double[n]; // n - кол-во столбцов
Добавлено через 37 секунд
Цитата Сообщение от Oksana_Ksu Посмотреть сообщение
А как тогда сделать,чтобы функция была и для одномерного и для двухмерного массива?
использовать тип double**

Добавлено через 11 минут 41 секунду
вот приблизительный код:
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
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
 
void MatrixMultiply(double** Result, double** A, double** B, int m1, int n1, int n2);
 
int main()
{
   double** Res;
   double** A;
   double** B;
 
   int m1 = 2; // кол-во строк первой матрицы
   int n1 = 2; // кол-во столбцов первой матрицы
 
   int m2 = n1; // кол-во строк второй матрицы
   int n2 = 2; // кол-во столбцов второй матрицы
 
   // создаем матрицы
   A = new double*[m1];
   for (int i=0; i<m1; i++) A[i] = new double[n1];
 
   B = new double*[m2];
   for (int i=0; i<m2; i++) B[i] = new double[n2];
 
   Res = new double*[m1];
   for (int i=0; i<m1; i++) Res[i] = new double[n2];
 
   // заполянем случ. числами
   srand(time(0));
   for (int i=0; i<m1; i++)
   {
      for (int j=0; j<n1; j++)
      {
         cout.width(3);
         A[i][j] = rand()%4+1;
         cout << A[i][j];
      }
      cout << endl;
   }
   cout << endl;
 
   for (int i=0; i<m2; i++)
   {
      for (int j=0; j<n2; j++)
      {
         cout.width(3);
         B[i][j] = rand()%4+1;
         cout << B[i][j];
      }
      cout << endl;
   }
   cout << endl;
 
   // выводим на экран и вычисляем
   MatrixMultiply(Res, A, B, m1, n1, n2);
 
   for (int i=0; i<m1; i++)
   {
      for (int j=0; j<n2; j++)
      {
         cout.width(3);
         cout << Res[i][j];
      }
      cout << endl;
   }
   cout << endl;
 
   // чистим за собой
   for (int i=0; i<m1; i++) delete[] A[i];
   for (int i=0; i<m2; i++) delete[] B[i];
   for (int i=0; i<m1; i++) delete[] Res[i];
 
   delete[] A;
   delete[] B;
   delete[] Res;
 
   return 0;
}
 
void MatrixMultiply(double** Result, double** A, double** B, int m1, int n1, int n2)
{  
   for (int i=0; i<m1; i++)
   {
      for (int z=0; z<n2; z++)
      {
         double sum=0;
         for (int j=0; j<n1; j++)
            sum += A[i][j]*B[j][z];
         Result[i][z] = sum;
      }
   }
}
Oksana_Ksu
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 20
23.05.2009, 10:54  [ТС]     Indefenid Direction (не пойму ошибки) #12
Спасибо огромное,я попробую))))))))))))))))))))))))))))))))))))))))))))))))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2009, 17:27     Indefenid Direction (не пойму ошибки)
Еще ссылки по теме:

Как то не пойму C++
C++ Помогите исправить ошибки в программе. Не пойму что не так
C++ Класс ArrayController, нужно создать функцию Sort(direction d)
C++ Не пойму
Не пойму что это за ошибки C++

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

Или воспользуйтесь поиском по форуму:
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
23.05.2009, 17:27     Indefenid Direction (не пойму ошибки) #13
Я вообще-то не говорил про повторную запись в матрицу В, ты что-то путаешь. Для результата создай матрицу С
Вообщем ладно уже, код написан))
Yandex
Объявления
23.05.2009, 17:27     Indefenid Direction (не пойму ошибки)
Ответ Создать тему
Опции темы

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