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

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

Войти
Регистрация
Восстановить пароль
 
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
#1

Матрица - C++

19.04.2010, 19:40. Просмотров 622. Ответов 17
Метки нет (Все метки)

В чем ошибка?
Как передать матрицу в функцию?

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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iomanip.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------
int sum(int **mas,const int m,const int r);
int vvod(int **mas,const int m,const int r);
int main()
{const int n=5,g=5;
int x[n][g],y[n][g],z[n][g],i,j;
cout<<"Matrica X:\n";
  vvod(x,n,g);
cout<<"\nMatrica Y:\n";
  vvod(y,n,g);
cout<<"\nMatrica Z:\n";
  vvod(z,n,g);
int q,w,e;
 q=sum(x,n,g);
 w=sum(y,n,g);
 e=sum(z,n,g);
cout<<"\n\nMax A= "<<q;
getch(); return 0;
}
 
int vvod(int **mas,const int m,const int r)
{int i,j;
for(i=0;i<m;i++)
 {for(j=0;j<r;j++)
  {mas[i][j]=random(100)-20;
  cout<<setw(4)<<a[i][j]<<" ";
  }
  cout<<"\n";
  }
return 0;}
 
int sum(int **mas,const int m,const int r)
{int i,j,s=0;
for(i=0;i<m;i++)
{for(j=0;j<r;j++)
 if(i<j) s+=mas[i][j];}
 return s;
//---------------------------------------------------------------------------
Добавлено через 28 минут
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2010, 19:40     Матрица
Посмотрите здесь:

дана квадратичная матрица z[n][n]. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не сим - C++
помогите пожалуйста. условие: дана квадратичная матрица z. составить программу, которая если матрица симметричная(транспонированная...

Дана квадратная матрица А порядка n. Проверьте, является ли матрица единичной - Delphi
Дана квадратная матрица А порядка n. Проверьте, является ли матрица единичной. Описать с помощью функций и процедур. Ввод-вывод в текстовый...

Дана квадратная матрица А порядка n. Проверить, является ли матрица единичной. - Turbo Pascal
Ребят,помогите решить задачу &quot;Дана квадратная матрица А порядка n. Проверить, является ли матрица единичной&quot;

Как доказать то, что матрица и транспонированная ей матрица имеют одинаковые собственные числа? - Алгебра
Как доказать то, что матрица и транспонированная ей матрица имеют одинаковые собственные числа с одинаковой кратностью? Добавлено...

Матрица:Даны натуральное число n, действительная матрица размера n х 9. Найти среднее арифметическое: каждого - QBasic
Даны натуральное число n, действительная матрица размера n х 9. Найти среднее арифметическое: каждого из столбцов.

Непонятки с DirectX (матрица поворота, камера, матрица проекции) - DirectX
Возник вопрос по DirectX, точнее по матрицам Вопрос 1: D3DXMATRIXA16 matWorld; UINT iTime = timeGetTime() % 10000; ...

Матрица:Даны натуральное число n, действительная матрица размера n х 9. Найти среднее арифметическое: каждого из столбцов - Free Pascal
Даны натуральное число n, действительная матрица размера n х 9. Найти среднее арифметическое: каждого из столбцов.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RAIDER_55
24 / 24 / 5
Регистрация: 04.04.2010
Сообщений: 229
19.04.2010, 19:57     Матрица #2
А что за массив a[i][j] в функции vvod??? он ни где не объявлен.
И рандом на сколько я помню не так используется
и еще return s; стоит вне фигурной скобки
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
19.04.2010, 20:26  [ТС]     Матрица #3
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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iomanip.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------
int sum(int **mas,const int m,const int n);
int vvod(int **mas,const int m,const int n);
int main()
{const int n=5,m=5;
int x[n][m],y[n][m],z[n][m],i,j;
randomize();
cout<<"Matrica X:\n";
  vvod(x,n,m); // Cannot convert 'int (*)(5)' to 'int**'
cout<<"\nMatrica Y:\n";
  vvod(y,n,m);
cout<<"\nMatrica Z:\n";
  vvod(z,n,m);
int q,w,e;
 q=sum(x,n,m);
 w=sum(y,n,m);
 e=sum(z,n,m);
cout<<"\n\nMax A= "<<q;
getch(); return 0;
}
 
int vvod(int **mas,const int m,const int n)
{int i,j;
for(i=0;i<m;i++)
 {for(j=0;j<n;j++)
  {mas[i][j]=random(100)-20;
  cout<<setw(4)<<mas[i][j]<<" ";
  }
  cout<<"\n";
  }
return 0;}
 
int sum(int **mas,const int m,const int n)
{int i,j,s=0;
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
 if(i<j) s+=mas[i][j];}
 return s;}
//---------------------------------------------------------------------------
Добавлено через 1 минуту
Цитата Сообщение от RAIDER_55 Посмотреть сообщение
А что за массив a[i][j] в функции vvod??? он ни где не объявлен.
То я случайно чиркнул.

А random я всегда так использовал.
return s, тоже исправил.

Добавлено через 27 минут
Кто то может помочь Пожалуйста.
Напишите хотя бы описание ф-ции
C++
1
int sum(...
RAIDER_55
24 / 24 / 5
Регистрация: 04.04.2010
Сообщений: 229
19.04.2010, 20:37     Матрица #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
#include "iostream"
#include "conio.h"
#include "time.h"
 
void vvod(int a[5][5])
{
    srand((unsigned)time(NULL));
    for (int i=0; i<5; i++)
    {
        for (int j=0; j<5; j++)
        {
            a[i][j]=rand()/1000;
            std::cout<<a[i][j]<<" ";
        }
        std::cout<<"\n";
    }
}
 
int sum(int a[5][5])
{
    int summa=0;
    for (int i=0; i<5; i++)
        for (int j=0; j<5; j++)
            if (i<j) summa+=a[i][j];
    return summa;       
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int a[5][5],s;
    vvod(a);
    s=sum(a);
    std::cout<<"\n"<<s;
}
мне в голову только это пришло
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 20:37     Матрица #5
а что за ошибку пишет?
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
19.04.2010, 20:40  [ТС]     Матрица #6
Везде где использовалась функция.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 20:41     Матрица #7
Цитата Сообщение от RAIDER_55 Посмотреть сообщение
int sum(int a[5][5])
массивы лучше по ссылке или как указатель на массив передавать, но не весь массив

Добавлено через 44 секунды
Цитата Сообщение от Jony Wocker Посмотреть сообщение
Везде где использовалась функция.
Компилятор что пишет?
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
19.04.2010, 20:42  [ТС]     Матрица #8
RAIDER_55,
Спасибо.
А можно,что то приближенное к этому:
C++
1
int sum(int **mas,const int m,const int n);
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 20:51     Матрица #9
пример передачи 2-ого массива

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
#include <iostream>
 
using namespace std;
 
float** CreateMatrix(int count_row,int count_col){
    float** Matrix=new float*[count_row];
    for (int i=0; i<count_row; i++)
    Matrix[i]=new float[count_col];
    for (int i=0; i<count_row; i++)
    for (int j=0; j<count_col; j++){
        Matrix[i][j]=2;
        cout<<Matrix[i][j];
    }
    return &Matrix[0];
}
 
int sum(float **mas,int ROWS,int COLS){
    int s=0;
    for (int i=0; i<ROWS; i++)
    for (int j=0; j<COLS; j++){
        s+=mas[i][j];
    }
    return s;
}
 
 
int main(){
 
float** mas=CreateMatrix(3,3);
cout<<endl;
cout<<sum(mas,3,3);
return 0;
}
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
19.04.2010, 21:06  [ТС]     Матрица #10
А можно ли найти максимальную сумму, не запихивая их в матрицу?

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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iomanip.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------
int sum(int a[5][5]);
int vvod(int a[5][5]);
int main()
{const int n=5,m=5;
int x[n][m],y[n][m],z[n][m],i,j;
randomize();
cout<<"Matrica X:\n";
  vvod(x);
cout<<"\nMatrica Y:\n";
  vvod(y);
cout<<"\nMatrica Z:\n";
  vvod(z);
int q,w,e;
 q=sum(x);
 w=sum(y);
 e=sum(z);
cout<<"\nSUM X= "<<q;
cout<<"\nSUM Y= "<<w;
cout<<"\nSUM Z= "<<e;
cout<<"\nMax SUM= "<< //Максимальная сумма 
getch(); return 0;
}
 
int vvod(int a[5][5])
{int i,j;
for(i=0;i<5;i++)
 {for(j=0;j<5;j++)
  {a[i][j]=random(100)-20;
  cout<<setw(4)<<a[i][j]<<" ";
  }
  cout<<"\n";
  }
return 0;}
 
int sum(int a[5][5])
{int i,j,s=0;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
 if(i<j) s+=a[i][j];}
 return s;}
//---------------------------------------------------------------------------
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 21:08     Матрица #11
Цитата Сообщение от Jony Wocker Посмотреть сообщение
не запихивая их в матрицу?
кого??
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
19.04.2010, 21:37  [ТС]     Матрица #12
PointsEqual,

Цитата Сообщение от PointsEqual Посмотреть сообщение
кого??
Суммы

Ну типа такого
C++
1
2
3
4
5
6
7
8
int max_sum(int x,int y,int z)
{int max;
 {if(x>y && x>z) max=x;
 else if (y>x && y>z) max=y;
 else (z>x && z>y) max=z;} //Тут ошибку показывает. Типа я пропустил" ; "
cout <<"\n max_sum="<<max;
return max;
}
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 21:44     Матрица #13
вам надо найти сумму элементов матрицы, или максимальный элемент в ней?

Добавлено через 3 минуты
компилятор пишет ошибку потому что вы пропустили if

C++
1
2
3
4
5
6
7
8
9
10
int max_sum(int x,int y,int z){
    int max;
     if(x>y && x>z) max=x;
     else
     if (y>x && y>z) max=y;
     else
     if (z>x && z>y) max=z;
    std::cout <<"\n max_sum="<<max;
    return max;
}
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
19.04.2010, 21:47  [ТС]     Матрица #14
Даны три квадратные матрицы X, Y, Z. Для каждой из них найти сумму элементов, лежащих выше главной диагонали. Определить максимальную из них.

Весь код:
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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iomanip.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------
int sum(int a[5][5]);
int vvod(int a[5][5]);
int max_sum(int x,int y,int z);
int main()
{const int n=5,m=5;
int x[n][m],y[n][m],z[n][m],i,j,Sx,Sy,Sz;
randomize();
cout<<"Matrica X:\n";
  vvod(x);
cout<<"\nMatrica Y:\n";
  vvod(y);
cout<<"\nMatrica Z:\n";
  vvod(z);
int q,w,e;
 Sx=sum(x);
 Sy=sum(y);
 Sz=sum(z);
cout<<"\nSUM X= "<<Sx;
cout<<"\nSUM Y= "<<Sy;
cout<<"\nSUM Z= "<<Sz;
max_sum(Sx,Sy,Sz);
getch(); return 0;
}
 
int vvod(int a[5][5])
{int i,j;
for(i=0;i<5;i++)
 {for(j=0;j<5;j++)
  {a[i][j]=random(100)-20;
  cout<<setw(4)<<a[i][j]<<" ";
  }
  cout<<"\n";
  }
return 0;}
 
int sum(int a[5][5])
{int i,j,s=0;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
 if(i<j) s+=a[i][j];}
 return s;}
 
int max_sum(int x,int y,int z)
{int max;
 {if(x>y && x>z) max=x;
 else if (y>x && y>z) max=y;
 else (z>x && z>y) max=z;}
cout <<"\n max_sum="<<max;
return max;
}
//---------------------------------------------------------------------------
Добавлено через 2 минуты
Спасибо
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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iomanip.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------
int sum(int a[5][5]);
int vvod(int a[5][5]);
int max_sum(int x,int y,int z);
int main()
{const int n=5,m=5;
int x[n][m],y[n][m],z[n][m],i,j,Sx,Sy,Sz;
randomize();
cout<<"Matrica X:\n";
  vvod(x);
cout<<"\nMatrica Y:\n";
  vvod(y);
cout<<"\nMatrica Z:\n";
  vvod(z);
int q,w,e;
 Sx=sum(x);
 Sy=sum(y);
 Sz=sum(z);
cout<<"\nSUM X= "<<Sx;
cout<<"\nSUM Y= "<<Sy;
cout<<"\nSUM Z= "<<Sz;
max_sum(Sx,Sy,Sz);
getch(); return 0;
}
 
int vvod(int a[5][5])
{int i,j;
for(i=0;i<5;i++)
 {for(j=0;j<5;j++)
  {a[i][j]=random(100)-20;
  cout<<setw(4)<<a[i][j]<<" ";
  }
  cout<<"\n";
  }
return 0;}
 
int sum(int a[5][5])
{int i,j,s=0;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
 if(i<j) s+=a[i][j];}
 return s;}
 
int max_sum(int x,int y,int z)
{int max;
 {if(x>y && x>z) max=x;
 else
 if (y>x && y>z) max=y;
 else if (z>x && z>y) max=z;}
cout <<"\n max_sum="<<max;
return max;
}
//---------------------------------------------------------------------------
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 21:53     Матрица #15
создаете три матрицы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
float** CreateMatrix(int count_row,int count_col){
    float** Matrix=new float*[count_row];
    for (int i=0; i<count_row; i++)
    Matrix[i]=new float[count_col];
    for (int i=0; i<count_row; i++)
    for (int j=0; j<count_col; j++){
        Matrix[i][j]=2;
        cout<<Matrix[i][j];
    }
    return &Matrix[0];
}
 
float **X=CreateMatrix(int count_row,int count_col);
float **Y=CreateMatrix(int count_row,int count_col);
float **Z=CreateMatrix(int count_row,int count_col);
потом передаете их в функцию суммы, (3 раза)

C++
1
2
3
int summaX=sum(X,ROWS,COLS);
int summaY=sum(Y,ROWS,COLS);
int summaZ=sum(Z,ROWS,COLS);
а потом находите максимальную сумму из 3


но эту функцию sum() следует изменить тк она ищет суммы всех элементов, а нодо только выше главной диогонали
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
20.04.2010, 21:53  [ТС]     Матрица #16
Цитата Сообщение от PointsEqual Посмотреть сообщение
но эту функцию sum() следует изменить тк она ищет суммы всех элементов, а нодо только выше главной диогонали
C++
1
if(i<j) s+=a[i][j];}
Добавлено через 30 минут
За это отвечает строка 47
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
20.04.2010, 22:10     Матрица #17
C++
1
    if(i<j) s+=a[i][j];
- элементы выше главной диогонали

C++
1
    if(i>j) s+=a[i][j];
- элементы ниже главной диогонали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2010, 22:27     Матрица
Еще ссылки по теме:

Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) - C++
#include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include &lt;stdlib.h&gt; int main(int argc, char* argv) { srand(time(NULL)); int mas; ...

Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) - C++
#include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include&lt;conio.h&gt; void main() { int mas; int N; int max_element; int...

Матрица В-транспонированная матрица А. Вывести матрицу В - Visual Basic
Дана матрица целых чисел А, состоящая из М строк и N столбцов Матрица В-транспонированная матрица А. Вывести матрицу В

Доказать, что матрица P идемпотентна. Показать, что матрица I = 2P - E инволютивна - MathCAD
Матрица P называется идемпотентной, если P2 = P. Матрица I называется инволютивной, если I2 = E.

Доказать, что матрица P идемпотентна. Показать, что матрица I = 2P - E инволютивна - Matlab
Очень нужна помощь первый раз использую matlab


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

Или воспользуйтесь поиском по форуму:
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
20.04.2010, 22:27  [ТС]     Матрица #18
Ну, все правильно.
Мне надо выше.
Yandex
Объявления
20.04.2010, 22:27     Матрица
Ответ Создать тему
Опции темы

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