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

Перегрузка friend оператора в матрицах - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ 2 мерный Массив, с указателями http://www.cyberforum.ru/cpp-beginners/thread810432.html
Всем привет, я написал сортировку методом ПОДСЧЁТА для двумерного массива с динамической памятью, и вот что то не работает , посмотрите код, я тут на форуме смотрел тему сортировки массивов, и всё равно для двумерного не получается у мня, спасибо заранее. int count_sort(int **ptrarray,int nrow,int ncol) { srand(time(0)); ptrarray = new int* ; for ( int count = 0; count <...
C++ работа над ошибками.графический редактор в С++ програмку составила. работает вроде правильно. только. выполняется один из пунктов , если выбирать,а как сделать правильно, чтоб после выполнения какого-либо пункта меню, возвращало обратно в начало выполнения программы к основному меню? и при работе с графическим редактором, во время работы программы график с окружностью выводится там же где и меню.как на рисунке. как правильнее оформить,... http://www.cyberforum.ru/cpp-beginners/thread810427.html
C++ Матрица (упорядочить каждую строку по убыванию элементов)
Помогите пожалуйста)) разработать программу, которая вводит целочисленную матрицу из n строк и m столбцов (1<n<=100, 1<m<=500) и упорядочить каждую строку по убыванию элементов
Кодировка ASII C++
Привет, честной народ! У меня такой вопрос. Дан символьный массив, где храниться шестнадцатеричное число. Как мы все знаем, "принимать участие" могут только цифры от 0 до 9 и кусочек алфавита от A до F. Собственно вопрос: как можно проверить нет ли там лишних символов? Предлагаю свой неправильный вариант, в нем где-то ошибка. char num; int lgh; cin >> num; lgh = strlen(num); for (int i =...
C++ iostream примеры использования http://www.cyberforum.ru/cpp-beginners/thread810412.html
Примеры привести по использованию iostream. Необходимо прочитать из файла имя, фамилию, отчество. В файле данные разделены пробелами. Сохранить имя, фамилию, отчество в переменные. После добавить еще одну запись в таком же формате (Имя Фамилия Отчество, разделенные пробелами). Заранее спасибо :)
C++ Ошибка Extra parameter in call to cos(double) Помогите, пожалуйста!!! Выбивает ошибку "Extra parameter in call to cos(double)" в этом блоке кода: double fun2(double x,double y) { double f; f=cos(y+0,5)+x-0,8; //функция №2 return f; } Не могу никак понять, что за прикол!!! подробнее

Показать сообщение отдельно
cskurt
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 14

Перегрузка friend оператора в матрицах - C++

16.03.2013, 20:50. Просмотров 311. Ответов 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
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <time.h>
#include <iostream>
using namespace std;
 short int ddd=1;
class Matrix
{
private:
    int mn,mm,**mass1;
    int i,j,handle1;
public:
     friend Matrix operator * (Matrix,Matrix);
     Matrix operator + (Matrix m1)
         {
             Matrix d1(3,3);
     for (i=0;i<3;i++)
    {
       for (j=0;j<3;j++)
       {
           d1.set(i,j,mass1[i][j]+m1.get(i,j));
       }
    }
     return d1;
     ddd=0;
         }
    Matrix(int n,int m)
    {
        mn=n;mm=m;
        mass1=(int**)malloc(n*sizeof(int*));
        for (i=0;i<n;i++) mass1[i]=(int*)malloc(m*sizeof(int));
    }
    
    Matrix()
    {
        mn=3;mm=3;
        mass1=(int**)malloc(3*sizeof(int*));
        for (i=0;i<mm;i++) mass1[i]=(int*)malloc(3*sizeof(int));
    }
    
    ~Matrix()
    {
        if (ddd)
        {
        for (int i=0;i<mn;++i) free(mass1[i]);
        free(mass1);
        }
    }
    int get(int i,int j)
    {
        return mass1[i][j];
    }
    void set(int i,int j)
    {
        mass1[i][j]=rand()%3;
    }
    void set(int i,int j,int handle1)
    {
        mass1[i][j]=handle1;
    }
    void out()
    {
        for (i=0;i<mn;i++)
    {
       for (j=0;j<mm;j++)
       {
           set(i,j);
           cout << get(i,j) << " ";
       }
       cout << endl;
     }
    }
};
    Matrix operator * (Matrix m1,Matrix m2)
    {
      Matrix d1(m1.mm,m2.mn);
      int handle1,i,j,k;
      for (i=0;i<m1.mm;i++) for (j=0;j<m2.mn;j++) 
 {
 handle1=0; 
 for (k=0;k<m2.mn;k++) handle1+=m1.get(i,k)*m2.get(k,j);
 d1.set(i,j,handle1);
 }
 ddd=0;
 return d1;
 
    }
int main()
{
    setlocale( LC_ALL,"rus" );
    int n=3; //строки
    int m=3; //столбцы
    srand(time(NULL)); 
    cout << "Матрица 1:" << endl;
    
    Matrix c1(n,m);
    c1.out();
    
    cout << "Матрица 2:" << endl;
    Matrix c2;
    c2.out();
    
    cout << "Перемножение матриц:" << endl;
    if (m==3)
 {
 Matrix c3=c1*c2;
 c3.out();
 }
 else cout << "Ошибка: Размеры матриц не соответствуют правилам 
 
умножения матриц" << endl;
 
 cout << "Сложение матриц:" << endl;
 if ((n==3) && (m==3))
 {
     Matrix c4=c1+c2;
     c4.out();
 }
  else {cout << "Ошибка: Размеры матриц не соответствуют правилам 
 
сложения матриц" << endl;}
    system("pause");
    return 0;
}
Там есть ошибка в логике умножения еще но пока руки не дошли и не в этом суть. Я использую short int ddd=1 для того что бы деструктор не заходил в операцию умножения матрицы, так как иначе она вылетает с ошибкой, хотя в сложении при комменте всё ок, даже если в умножении я просто создаю матрицу 3 на 3 всё равно деструктор там находит ошибку. Можно ли как-то обойтись без short int ddd=1? хочется что бы выглядело красиво или без него никак?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru