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

Создать динамический класс Матрица и найти А+В, А-В, А*В - C++

Восстановить пароль Регистрация
 
Ianyska
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 2
07.04.2014, 16:27     Создать динамический класс Матрица и найти А+В, А-В, А*В #1
Всем добрый день! Мне нужно создать динамический класс Матрица и найти А+В, А-В, А*В. У меня возникла проблема: пишет Build Error. НЕ могу понять, в чём ошибка. Помогите найти ошибки и их исправить. Заранее благодарна

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
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
class matrix
{int sizem, sizen;
float**v;
public:
       matrix(int a,int b)
         {sizem=a; sizen=b;
         v=new float*[a];
         for(int i=0;i<a;i++)
         v[i]=new float[b];}
 
       void init()
         {printf("Enter matrix \n");
         for(int i=0;i<sizem;i++)
          {for(int j=0;j<sizen;j++)
          scanf("%f",&v[i][j]); printf("\n");}}
 
       matrix(matrix&x,matrix&y)
         {sizem=x.sizem; sizen=y.sizen;
         v=new float*[sizem];
         for(int i=0;i<sizem;i++)
         v[i]=new float[sizen];}
 
       friend matrix & operator + (matrix&x,matrix&y)
         {matrix z(x,y);
         for(int i=0;i<z.sizem;i++)
          for(int j=0;j<z.sizen;j++)
          z.v[i][j]=x.v[i][j]+y.v[i][j];
          return z;}
 
       friend matrix & operator - (matrix&x,matrix&y)
         {matrix z(x,y);
         for(int i=0;i<z.sizem;i++)
          for(int j=0;j<z.sizen;j++)
          z.v[i][j]=x.v[i][j]-y.v[i][j];
          return z;} 
 
       friend matrix & operator * (matrix&x,matrix&y)
         {matrix z(x,y);
         for(int i=0;i<z.sizem;i++)
          for(int j=0;j<z.sizen;j++)
           for(int k=0;k<x.sizen;k++)
            for(int m=0;m<y.sizem;m++)
            z.v[i][j]=z.v[i][j]+x.v[i][k]*y.v[m][j];
            return z;} 
 
       friend int porivniannia (matrix&x,matrix&y)
         {int i=0;
         if((x.sizem==x.sizen)&&(y.sizem==y.sizen)) i=1;
         if((x.sizem==y.sizem)&&(x.sizen==y.sizen)) i=2;
         if(x.sizen==y.sizem) i=3;
         return i;}
 
       void out()
         {for(int i=0;i<sizem;i++)
          {for(int j=0;j<sizen;j++)
          printf("%f",v[i][j]); printf("\n");}}
};
 
int main()
{matrix A,B;
printf("Vvedite razmernost matrix A \n");
int a,b;
scanf("%d,%d",&a,&b);
matrix A(a,b);
A.init();
printf("Vvedite razmernost matrix B \n");
int c,d;
scanf("%d,%d",&c,&d);
matrix B(c,d);
B.init();
matrix z;
matrix z(A,B);
int p=porivniannia(A,B);
if((p==1)||(p==2))
  {z=A+B;
  printf("Matrix A+B=\n"); z.out();
  z=A-B;
  printf("Matrix A-B=\n"); z.out();}
if((p==1)||(p==3))
  {z=A*B;
  printf("Matrix A*B=\n"); z.out();}
if(p==0)
  printf("Error\n");
getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2014, 16:27     Создать динамический класс Матрица и найти А+В, А-В, А*В
Посмотрите здесь:

C++ Создать класс-динамический массив
Создать класс Matrix, реализующий двухмерный динамический массив типа int C++
C++ Создать динамический класс для работы со строками. Перегрузка строкового класса
C++ Создать шаблонный класс - двумерный динамический массив
C++ Создать класс с 1 полем: динамический массив char
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.04.2014, 16:34     Создать динамический класс Матрица и найти А+В, А-В, А*В #2
Цитата Сообщение от Ianyska Посмотреть сообщение
C++
1
matrix A,B;
Вызывается консутркутор без параметров, который у Вас не описан
Цитата Сообщение от Ianyska Посмотреть сообщение
C++
1
matrix(matrix&x,matrix&y)
wtf?? это типо конструктор копирования подразумевался?
исправить на
C++
1
 matrix(const matrix&x)
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.04.2014, 16:37     Создать динамический класс Матрица и найти А+В, А-В, А*В #3
aLarman, реконструктор. Х)
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.04.2014, 16:52     Создать динамический класс Матрица и найти А+В, А-В, А*В #4
SatanaXIII, я чего то не знаю? объясняйте
Ianyska
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 2
07.04.2014, 17:02  [ТС]     Создать динамический класс Матрица и найти А+В, А-В, А*В #5
Я это переделала, скомпилировалось нормально, но теперь ввод не такой как положено, я могу вводить очень много чисел в строку матрицы. Ко вводу второй матрицы не переходит. Посмотрите, пожалуйста

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
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
class matrix
{int sizem, sizen;
float**v;
public:
       matrix(int a,int b)
         {sizem=a; sizen=b;
         v=new float*[a];
         for(int i=0;i<a;i++)
         v[i]=new float[b];}
 
       void init()
         {printf("Enter matrix \n");
         for(int i=0;i<sizem;i++)
          {for(int j=0;j<sizen;j++)
          scanf("%f",&v[i][j]); printf("\n");}}
 
 
       friend matrix & operator + (matrix&x,matrix&y)
         {matrix z(x.sizem,y.sizen);
         for(int i=0;i<z.sizem;i++)
          for(int j=0;j<z.sizen;j++)
          z.v[i][j]=x.v[i][j]+y.v[i][j];
          return z;}
 
       friend matrix & operator - (matrix&x,matrix&y)
         {matrix z(x.sizem,y.sizen);
         for(int i=0;i<z.sizem;i++)
          for(int j=0;j<z.sizen;j++)
          z.v[i][j]=x.v[i][j]-y.v[i][j];
          return z;} 
 
       friend matrix & operator * (matrix&x,matrix&y)
         {matrix z(x.sizem,y.sizen);
         for(int i=0;i<z.sizem;i++)
          for(int j=0;j<z.sizen;j++)
           for(int k=0;k<x.sizen;k++)
            for(int m=0;m<y.sizem;m++)
            z.v[i][j]=z.v[i][j]+x.v[i][k]*y.v[m][j];
            return z;} 
 
       friend int porivniannia (matrix&x,matrix&y)
         {int i=0;
         if((x.sizem==x.sizen)&&(y.sizem==y.sizen)) i=1;
         if((x.sizem==y.sizem)&&(x.sizen==y.sizen)) i=2;
         if(x.sizen==y.sizem) i=3;
         return i;}
 
       void out()
         {for(int i=0;i<sizem;i++)
          {for(int j=0;j<sizen;j++)
          printf("%f",v[i][j]); printf("\n");}}
};
 
int main()
{printf("Vvedite razmernost matrix A \n");
int a,b; 
scanf("%d,%d",&a,&b);
matrix A(a,b);
A.init();
printf("Vvedite razmernost matrix B \n");
int c,d;
scanf("%d,%d",&c,&d);
matrix B(c,d);
B.init();
matrix z(a,d);
int p=porivniannia(A,B);
if((p==1)||(p==2))
  {z=A+B;
  printf("Matrix A+B=\n"); z.out();
  z=A-B;
  printf("Matrix A-B=\n"); z.out();}
if((p==1)||(p==3))
  {z=A*B;
  printf("Matrix A*B=\n"); z.out();}
if(p==0)
  printf("Error\n");
getch();
return 0;
}
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.04.2014, 17:08     Создать динамический класс Матрица и найти А+В, А-В, А*В #6
C++
1
2
int a,b;
scanf("%d,%d",&a,&b);
для начала посмотрите что запишется в а и b (просто выведите их после ввода)
Yandex
Объявления
07.04.2014, 17:08     Создать динамический класс Матрица и найти А+В, А-В, А*В
Ответ Создать тему
Опции темы

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