Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2011, 02:07   #1
Anonimius
Новичок
Джуниор
 
Регистрация: 21.10.2011
Сообщений: 5
Восклицание C++, классы, перегрузка операций, матрицы

Задача:
Создайте класс «Целочисленная матрица» для работы с матрицами произвольного размера. В классе должны быть реализованы следующие операции:
• сложения, вычитания, умножения матрицы на матрицу и умножения матрицы на число. Для обозначения операций используйте знаки «+»,«-», «*» (реализовать с помощью перегрузки операций);
• заполнения матрицы случайными числами из заданного диапазона;
• вывода матрицы на печать;
• доступа к отдельным элементам (для присваивания и считывания значения);
• сравнения на равенство (операция ==).
При создании матрица заполняется нулями или инициализируется значениями другой матрицы.
Продемонстрировать в программе работу с этим классом.

____
В особенности затруднения вызывают 1, 4 пункты. С первым долго возилась, но ничего не получается:
Код:
#include<iostream>
#include<string.h>
#include<iomanip>
using namespace std;

const int M = 4;
 
class matrix
{int data[M][M];
 
public:
        int& at(int a, int b) { return data[a][b]; }
 
        matrix()
        {
                for (int i=0; i<M; i++)
                for (int j=0; j<M; j++)
                        data[i][j] = 0;
        }
 
        matrix operator+ (matrix& m1)
        {
                matrix result1;
                for (int i=0; i<M; i++)
                for (int j=0; j<M; j++)
                        result1[i][j] = this->at(i, j) + m1[i][j];
 
                return result1;
        }

		        matrix operator- (matrix& m2)
        {
                matrix result2;
                for (int i=0; i<M; i++)
                for (int j=0; j<M; j++)
                        result2[i][j] = this->at(i, j) - m2[i][j];
 
                return result2;
        }

				        matrix operator* (matrix& m3)
        {
                matrix result3;
                  for(int i = 0; i < M; i++)
					  for(int j = 0; j < M; j++){
      result3[i][j] = 0;
      for(int k = 0; k < M; k++)
        resuit3[i][j] += this->at[i][k] *m3[k][j];}
					  return result3;}

						int rand (matrix &m4) {for (i=0;i<M;i++) for (j=0;j<M;j++) result4

};
Наверное видно по коду, что я не совсем понимаю, что делаю. Сильно не бейте - я жалкий экономист с отвратительной информатикой)
SOS
Anonimius вне форума Ответить с цитированием
Старый 21.10.2011, 02:25   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

у вас код покарёжился.

а вообще мощЪна для экономистов.

а что м.б. сложного в 4 пункте при выполненном 1-м?)

Код:
bool operator==(matrix& m) {
                for (int i=0; i<M; i++)
                for (int j=0; j<M; j++)
                        if (this->data[i][j]!=m.data[i][j]) return false;

return true;
}
onewho вне форума Ответить с цитированием
Старый 21.10.2011, 02:34   #3
Anonimius
Новичок
Джуниор
 
Регистрация: 21.10.2011
Сообщений: 5
По умолчанию

да мы всей группой несколько в шоке) Для нас эта задача была неожиданностью. Пытались самообразовываться книжками, но времени на это просто нет - скоро по этой "прелести" отчитываться будем.

Покарёжился? Ну так это 1-ый пункт... Не работает, и составляет глааавную проблему

____
1-ый пункт не выполнен. Он не работает

Последний раз редактировалось Anonimius; 21.10.2011 в 02:41.
Anonimius вне форума Ответить с цитированием
Старый 21.10.2011, 03:43   #4
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Anonimius Посмотреть сообщение
1-ый пункт не выполнен. Он не работает
Просто синтаксическая ошибка там. Доступ к элементам массива получайте через .data[i][j] или вызовом метода at( i, j)
An1ka вне форума Ответить с цитированием
Старый 21.10.2011, 07:53   #5
Anonimius
Новичок
Джуниор
 
Регистрация: 21.10.2011
Сообщений: 5
По умолчанию

Пожалуйста, помогите исправить. Чёртова пропасть ошибок Т_Т
Код:
#include<iostream>//я не уверена, что это все необходимые эм... заголовки
#include<string.h>
#include<iomanip>
using namespace std;

const int n = 4;
 
class matrix
{int array[n][n];
 
public:
	int& at(int a, int b) { return array[a][b]; }
 
        matrix()     //заполняю матрицу нулями(есть в задаче такое пожелание)
        {for (int i=0; i<n; i++)
         for (int j=0; j<n; j++)
         array[i][j] = 0;}
 
        
		matrix operator+ (matrix& m1)//перегрузка +, сложение матриц
        {matrix result1;
                for (int i=0; i<n; i++)
                for (int j=0; j<n; j++)
                result1[i][j] = this->at(i,j) + m1.array[i][j];
                return result1;}

		        
		matrix operator- (matrix& m2)// перегрузка -, вычитание матриц
        {matrix result2;
                for (int i=0; i<n; i++)
                for (int j=0; j<n; j++)
                result2[i][j] = this->at(i, j) - m2.array[i][j];
                return result2;}

		
		matrix operator* (matrix& m3)// перегрузка*, умножение матриц (вообще-то в задании на число... 
        {matrix result3;//Но я как всегда читаю задание через задницу, но не суть. Всё равно ж не работает)
        for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
	    {result3[i][j] = 0;
		for(int k = 0; k < n; k++)
        resuit3[i][j] += this->at[i][k] *m3.array[k][j];}
					  
		return result3;}

						
		
		int rand (matrix &m4) {for (int i=0;i<n;i++) for (int j=0;j<n;j++) m4.array[i][j]=random(10);}// нарандомила матрицу. Кстати,а так рандомить можно? Си и Паскаль и Бейсик таким чудным образом перемешались в моей голове XD


                
		bool operator==(matrix& m5) //сравнение матриц
		{for (int i=0; i<n; i++)
         for (int j=0; j<n; j++)
         if (this->array[i][j]!=m5.array[i][j]) return false;

return true;
}
						
		int print (matrix &m6)    //печать матрицы
		{for (int i=0; i<n; i++)
		cout<<endl;
         for(int j=0; j<n; j++)
		cout<<setw(5)<<m6.array[i][j];cout<<endl<<endl;}





};


 
void main()
{matrix a,b,c;
//рандомлю матрицы	 
b.rand;
c.rand;
cout<<(b==c); //теоретически это должно быть сравнение матриц b и c c последующим выводом на экран t or f
//вывожу матрицы на экран
cout<<"a";
a.print// теоретически я хочу, чтобы здесь вывелась нулевая матрица. Это произойдёт?
cout<<"b";
b.print;
cout<<"c";
c.print;
//сложила/вычла/умножила матрицы и вывела... наверное
a=b+c;
cout<<"a=b+c";
a.print
cout<<"a=b-c";
a=b-c;
a.print;
cout<<"a=b*c";
a=b*c;
a.print;
return(0);}

Последний раз редактировалось Stilet; 21.10.2011 в 09:22.
Anonimius вне форума Ответить с цитированием
Старый 21.10.2011, 07:54   #6
Anonimius
Новичок
Джуниор
 
Регистрация: 21.10.2011
Сообщений: 5
По умолчанию

спасибо, даже не заметила
Но компилятор всё равно крыл бы меня матами, если бы научился разговаривать

Последний раз редактировалось Anonimius; 21.10.2011 в 08:29.
Anonimius вне форума Ответить с цитированием
Старый 21.10.2011, 16:53   #7
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Код:
class matrix
{
	int arr[n][n];
 
public:
	int& at(int a, int b) { return arr[a][b]; }
 
        matrix()     //заполняю матрицу нулями(есть в задаче такое пожелание)
        {
			for (int i=0; i<n; i++)
			for (int j=0; j<n; j++)
			arr[i][j] = 0;
		}
 
        
		matrix operator+ (matrix& m1)//перегрузка +, сложение матриц
        {
			matrix result1;

                for (int i=0; i<n; i++)
                for (int j=0; j<n; j++)
                result1.arr[i][j] = this->at(i,j) + m1.arr[i][j];

                return result1;
		}

		        
		matrix operator- (matrix& m2)// перегрузка -, вычитание матриц
        {
			matrix result2;

                for (int i=0; i<n; i++)
                for (int j=0; j<n; j++)
                result2.arr[i][j] = this->at(i, j) - m2.arr[i][j];

                return result2;
		}

		
		matrix operator* (matrix& m3)// перегрузка*, умножение матриц (вообще-то в задании на число... 
        {
			matrix result3;//Но я как всегда читаю задание через задницу, но не суть. Всё равно ж не работает)
       
			for(int i = 0; i < n; i++)
				for(int j = 0; j < n; j++)
				{
					result3.arr[i][j] = 0;
					for(int k = 0; k < n; k++)
					result3.arr[i][j] += this->at(i,k)* m3.arr[k][j];
				}
					  
		return result3;
		}		
		
		void rand() {

			for (int i=0;i<n;i++) 
				for (int j=0;j<n;j++) 
					arr[i][j]=::rand()%10;

		} // нарандомила матрицу. Кстати,а так рандомить можно? Си и Паскаль и Бейсик таким чудным образом перемешались в моей голове XD


                
		bool operator==(matrix& m5) //сравнение матриц
		{
			for (int i=0; i<n; i++)
				for (int j=0; j<n; j++)
					if (this->arr[i][j]!=m5.arr[i][j]) return false;

		return true;
		}
						
		int print (matrix &m6)    //печать матрицы
		{
			for (int i=0; i<n; i++) {
			cout<<endl;
			for(int j=0; j<n; j++)
			cout<<setw(5)<<m6.arr[i][j];cout<<endl<<endl;
			}
		
		}





};
Грамматические ошибки исправил, работоспособность не проверял.
array на arr заменил, т.к в студии это ключевое слово


кстати, а конструктор копирования здесь случаем не нужен?

Последний раз редактировалось onewho; 21.10.2011 в 16:57.
onewho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Перегрузка операций sir.andrey Помощь студентам 3 08.07.2011 15:18
перегрузка операций nastya081108 Помощь студентам 0 18.05.2010 21:16
Перегрузка стандартных операций Новичек_Rudik Помощь студентам 1 19.04.2010 23:32
перегрузка операций в си++ Serjuk Общие вопросы C/C++ 9 20.03.2010 21:30