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

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

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

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

23.05.2009, 08:05. Просмотров 667. Ответов 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

Помогите,плиз!!!Не пойму в чем дело((((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2009, 08:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Indefenid Direction (не пойму ошибки) (C++):

Не пойму что это за ошибки - C++
Обьясните что это за ошибки и что с ними делать 1) invalid initialization of reference of type 'TPQueue* &amp;' from expression of type...

Ошибки я не пойму что от меня хотят - C++
Есть 3 файла. main.cpp, array1.cpp и array1.h. Собственно такие ошибки \ivan\array1.h||In function 'std::ostream&amp;...

Ошибки выдаёт ( не пойму причину, что не так? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int Area(float a, float b,...

Помогите исправить ошибки в программе. Не пойму что не так - C++
Помогите пожалуйста понять суть ошибок. 20 ошибок &quot;binary '&lt;&lt;' : no operator defined which takes a right-hand operand of type 'class...

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

Класс "Автомат", не пойму ошибки - C++
• Разработать класс Automata (автомат), являющийся упрощённой моделью автомата по продаже горячих напитков. o Изучить принцип...

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

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

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

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

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

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


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

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

Добавлено через 3 минуты 14 секунд
А,я поняла с типом!!!!
А как тогда сделать,чтобы функция была и для одномерного и для двухмерного массива?
*(С+str+stol) - так нельзя,только там нужно наверно что-то сделать с sizeof(double) чтобы он адрес указателя менялся на величину double
Как сделать?
0
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
23.05.2009, 10:41 #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;
      }
   }
}
1
Oksana_Ksu
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 20
23.05.2009, 10:54  [ТС] #12
Спасибо огромное,я попробую))))))))))))))))))))))))))))))))))))))))))))))))
0
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
23.05.2009, 17:27 #13
Я вообще-то не говорил про повторную запись в матрицу В, ты что-то путаешь. Для результата создай матрицу С
Вообщем ладно уже, код написан))
0
23.05.2009, 17:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2009, 17:27
Привет! Вот еще темы с ответами:

не пойму причину ошибки - Pascal
вот прога, надо по названию продукта, выводить о нем инфу, после первой строки read (f, .. ..пишет error type mismatch, я заполнял файл...

Не пойму причину ошибки! - Delphi
Здравствуйте! В данном куске кода у меня должен удаляться выделенный элемент в CheckListBox1 и в зависимости от отмеченной строчки...

не пойму что за ошибки - Lazarus
procedure TForm1.Button6Click(Sender: TObject); var i: integer; begin WITH openDialog1 DO IF Execute THEN ...

Не пойму как исправить ошибки:( - C++ WinAPI
в среде dev-c++ все работало, а вот в Visual Studio не хочет компилироваться:( #include &quot;stdafx.h&quot; #include &quot;Win32Project1.h&quot; ...


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

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

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