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

Матрица

19.04.2010, 19:40. Просмотров 871. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2010, 19:40
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 44 секунды
Цитата Сообщение от Jony Wocker Посмотреть сообщение
Везде где использовалась функция.
Компилятор что пишет?
0
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
ниначмуроФ
846 / 530 / 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
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
ниначмуроФ
846 / 530 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
19.04.2010, 21:08 11
Цитата Сообщение от Jony Wocker Посмотреть сообщение
не запихивая их в матрицу?
кого??
1
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
ниначмуроФ
846 / 530 / 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
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
ниначмуроФ
846 / 530 / 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
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
ниначмуроФ
846 / 530 / 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
45 / 45 / 3
Регистрация: 19.11.2009
Сообщений: 362
20.04.2010, 22:27  [ТС] 18
Ну, все правильно.
Мне надо выше.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2010, 22:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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