Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Jony Wocker
45 / 45 / 3
Регистрация: 19.11.2009
Сообщений: 362
#1

Матрица - C++

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

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

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

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

Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор: (A=E)b, где E единичная матрица порядка n
Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор:...

Определить базовый класс "Матрица" и класс-потомок "Треугольная матрица"
Нужно определить класс &quot;матрица&quot; с возможностью динамического выделения и...

Матрица
2.3) Дана квадратная матрица.Поменять последние элементы каждого столбца с...

17
RAIDER_55
24 / 24 / 15
Регистрация: 04.04.2010
Сообщений: 229
19.04.2010, 19:57 #2
А что за массив a[i][j] в функции vvod??? он ни где не объявлен.
И рандом на сколько я помню не так используется
и еще return s; стоит вне фигурной скобки
1
Jony Wocker
45 / 45 / 3
Регистрация: 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(...
0
RAIDER_55
24 / 24 / 15
Регистрация: 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;
}
мне в голову только это пришло
1
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 20:37 #5
а что за ошибку пишет?
1
Jony Wocker
45 / 45 / 3
Регистрация: 19.11.2009
Сообщений: 362
19.04.2010, 20:40  [ТС] #6
Везде где использовалась функция.
0
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 20:41 #7
Цитата Сообщение от RAIDER_55 Посмотреть сообщение
int sum(int a[5][5])
массивы лучше по ссылке или как указатель на массив передавать, но не весь массив

Добавлено через 44 секунды
Цитата Сообщение от Jony Wocker Посмотреть сообщение
Везде где использовалась функция.
Компилятор что пишет?
0
Jony Wocker
45 / 45 / 3
Регистрация: 19.11.2009
Сообщений: 362
19.04.2010, 20:42  [ТС] #8
RAIDER_55,
Спасибо.
А можно,что то приближенное к этому:
C++
1
int sum(int **mas,const int m,const int n);
0
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 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;
}
1
Jony Wocker
45 / 45 / 3
Регистрация: 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;}
//---------------------------------------------------------------------------
0
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 21:08 #11
Цитата Сообщение от Jony Wocker Посмотреть сообщение
не запихивая их в матрицу?
кого??
1
Jony Wocker
45 / 45 / 3
Регистрация: 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;
}
0
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 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;
}
1
Jony Wocker
45 / 45 / 3
Регистрация: 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;
}
//---------------------------------------------------------------------------
0
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 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() следует изменить тк она ищет суммы всех элементов, а нодо только выше главной диогонали
0
Jony Wocker
45 / 45 / 3
Регистрация: 19.11.2009
Сообщений: 362
20.04.2010, 21:53  [ТС] #16
Цитата Сообщение от PointsEqual Посмотреть сообщение
но эту функцию sum() следует изменить тк она ищет суммы всех элементов, а нодо только выше главной диогонали
C++
1
if(i<j) s+=a[i][j];}
Добавлено через 30 минут
За это отвечает строка 47
0
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 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];
- элементы ниже главной диогонали
0
Jony Wocker
45 / 45 / 3
Регистрация: 19.11.2009
Сообщений: 362
20.04.2010, 22:27  [ТС] #18
Ну, все правильно.
Мне надо выше.
0
20.04.2010, 22:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2010, 22:27
Привет! Вот еще темы с решениями:

Матрица
помогите пожалуйста решить задачку, очень нужно(((((( Дано: Xϵ и Yϵ....

Матрица
Дана челочисленная матрица поменять местами первую строку на последнюю, вторую...

Матрица
Нужно разработать матрицу которая бы была в пределах: i=0;8 j=0;10

матрица
Создать матрицу 3х2 найти в ней найбольший и найменьший элемент


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

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

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