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

Матрица - C++

Восстановить пароль Регистрация
 
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
19.04.2010, 19:40     Матрица #1
В чем ошибка?
Как передать матрицу в функцию?

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     Матрица
Посмотрите здесь:

матрица C++
матрица C++
МАТРИЦА!!! C++
C++ Матрица
C++ матрица
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 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
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 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
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 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
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 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
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 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
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 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
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 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     Матрица
Еще ссылки по теме:

Квадратная матрица А называется ортогональной,если А^T=А^-1. Определить, является ли заданная матрица А(n,n) ортогональной. C++
C++ Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор: (A=E)b, где E единичная матрица порядка n
Матрица C++

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

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

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