Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
3 / 3 / 1
Регистрация: 20.09.2010
Сообщений: 100

Класс матриц

14.05.2011, 19:45. Показов 1568. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание звучит так : разработать класс для работы с матрицами 2х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
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
#include <iostream.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include <windows.h>
 
// Описание класса для работы с квадратными матрицами порядка 2
class matrix {
private: float mData[4];
public:  matrix() {for (int i=0;i<4;i++) mData[i]=0;};
                 matrix(float el1,float el2,float el3,float el4) {mData[0]=el1; mData[1]=el2; mData[2]=el3;mData[3]=el4;};
                 float getel1() {return mData[0];};
                 float getel2() {return mData[1];};
                 float getel3() {return mData[2];};
                 float getel4() {return mData[3];};
 
                 void print() {cout<<mData[0]<<"\t"<<mData[1]<<"\n"<<mData[2]<<"\t"<<mData[3]<<endl;}            
                 
                 bool operator ==(const matrix &m) 
                 {if ((mData[0]==m.mData[0])&&(mData[1]==m.mData[1])&&(mData[2]==m.mData[2])&&(mData[3]==m.mData[3])) 
                         return true; return false;};
                 bool operator !=(const matrix &m) 
                 {if ((mData[0]==m.mData[0])&&(mData[1]==m.mData[1])&&(mData[2]==m.mData[2])&&(mData[3]==m.mData[3])) 
                         return false; return true;};
                 matrix  operator + (const matrix &m) 
                                {float d[4]; for (int i=0;i<4;i++) d[i]=mData[i]+m.mData[i]; matrix res(d[0],d[1],d[2],d[3]); return res;};
                 matrix  operator - (const matrix &m) 
                                {float d[4]; for (int i=0;i<4;i++) d[i]=mData[i]-m.mData[i]; matrix res(d[0],d[1],d[2],d[3]); return res;};
                 matrix  operator * (float f) 
                                {float d[4]; for (int i=0;i<4;i++) d[i]=mData[i]*f; matrix res(d[0],d[1],d[2],d[3]); return res;};
                 matrix operator * (const matrix &m)
                                {float d[4];for(int i=0;i<4;i++){
                d[0]=mData[0]*m.mData[0]+mData[1]*m.mData[2];
                d[1]=mData[0]*m.mData[1]+mData[1]*m.mData[3];
                d[2]=mData[2]*m.mData[0]+mData[3]*m.mData[2];
                d[3]=mData[2]*m.mData[1]+mData[3]*m.mData[3];}
                 matrix res(d[0],d[1],d[2],d[3]); return res;}
 
                 void Transponirovanie() { cout<<mData[0]<<"\t"<<mData[2]<<"\n"<<mData[1]<<"\t"<<mData[3]<<endl;}
                 void Obratnaya() { float q,r;
                        r=mData[0]*mData[3]-mData[1]*mData[2];
                        if(r==0) {cout<<"Obratnoi matrici ne sushestvuet"<<endl;}
                        else {q=1/r;
                 float d[4];for(int i=0;i<4;i++) 
                 {      d[0]=q*mData[3];
                        d[1]=(-1)*q*mData[1];
                        d[2]=(-1)*q*mData[2];
                        d[3]=q*mData[0];}
                        matrix res(d[0],d[1],d[2],d[3]); 
                        cout<<d[0]<<"\t"<<d[1]<<"\n"<<d[2]<<"\t"<<d[3]<<endl;}
                 };
                 void Determinant() { float det; det=mData[0]*mData[3]-mData[1]*mData[2]; cout<<"Determinant raven"<<"\t"<<det<<endl; } 
                 void Sled() { float sl; sl=mData[0]+mData[3]; cout<<"Sled raven"<<"\t"<<sl<<endl; }
};
 
 
int menu();
matrix vvod(int number);
 
int menu() //Функция вывода меню. Возвращает ответ пользователя.
{char buf[10];
int option;
do {
puts("============================");
puts("1-Summa matric");
puts("2-Raznost matric");
puts("3-Umnojenie matrici na skalyar");
puts("4-Transponirovanie matrici");
puts("5-Nahojdenie obratnoi matrici");
puts("6-Umnojenie matric");
puts("7-Opredelitel matrici");
puts("8-Sled matrici");
puts("9-Exit");
puts("============================");
cin>>buf;
option=atoi(buf);}
while (!option); 
return option;
}
 
matrix vvod(int number){
        float e[4];
        cout<<"Vevedite matricu nomer"<<number<<endl;
        for(int i=0;i<4;i++) { cin>>e[i];}
matrix res(e[0],e[1],e[2],e[3]);
return res;
}
 
 
    
int main()         // Главная функция
{
        matrix a;
        matrix b;
        matrix c;
        float f;
        while (true){
switch (menu()){
case 1: system("cls");a=vvod(1);b=vvod(2); c=a+b;cout<<"Rezultat"<<"\n";c.print(); cout<<endl;break;
case 2: system("cls");a=vvod(1);b=vvod(2); c=a-b;cout<<"Rezultat"<<"\n";c.print(); cout<<endl;break;
case 3: system("cls");a=vvod(1);cout<<"vvedite skalyar";cin>>f; c=a*f;cout<<"Rezultat"<<"\n";c.print(); cout<<endl;break;
case 4: system("cls");a=vvod(1);cout<<"Rezultat"<<"\n";a.Transponirovanie();break;
case 5: system("cls");a=vvod(1);cout<<"Rezultat"<<"\n";a.Obratnaya();break;
case 6: system("cls");a=vvod(1);b=vvod(2); c=a*b;cout<<"Rezultat"<<"\n";c.print(); cout<<endl;break;
case 7: system("cls");a=vvod(1);a.Determinant();break;
case 8: system("cls");a=vvod(1);a.Sled();break;
case 9: return 0;
default: cout<<"Takoi optii net"<<endl;
}};
 
        return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2011, 19:45
Ответы с готовыми решениями:

Базовый класс Complex и производный класс для реализации квадратных матриц
1) Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в алгебраической форме и основных операций с ними:...

Класс матриц
Подскажите, пожалуйста, как переделать метод ввода матрицы в обычную функцию вне класса, и как ее вызывать в main. class Matrix //...

Класс матриц
Пытаюсь написать класс матриц.Никак не удаётся перегрузить оператор = . Выдаёт : ambiguous overload for 'operator=' in 'k = b' ...

5
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 20:03
Возведение в степень n - это умножение элемента на себя n раз. У вас же уже есть оператор умножения на матрицу.
0
3 / 3 / 1
Регистрация: 20.09.2010
Сообщений: 100
14.05.2011, 20:47  [ТС]
если бы все было так просто , я бы не обращался на форум )
0
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 20:58
Цитата Сообщение от dota Посмотреть сообщение
если бы все было так просто , я бы не обращался на форум )
А что, все сложно?

C++
1
2
3
4
5
6
7
matrix matrix::pow(const matrix& base, int power)
{
    matrix cur(base);
    while (--power)
        cur = cur * base;
    return cur;
}
0
3 / 3 / 1
Регистрация: 20.09.2010
Сообщений: 100
14.05.2011, 21:20  [ТС]
так , что такое cut и base ?
PS: спс )
0
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 21:35
Цитата Сообщение от dota Посмотреть сообщение
так , что такое cut и base ?
PS: спс )
cur вообще должен был называться product - это произведение.
base - это то, что возводится в степень.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.05.2011, 21:35
Помогаю со студенческими работами здесь

Класс Матриц
Добрый вечер, такая проблема. Есть программки матриц (каждая отдельная), такие как - сложение/вычитание, умножение, транспонирование,...

Класс матриц
Нужно описать класс матриц, реализовать функции сложения, умножения, вычитания, сравнения матриц и проверки на диагональность (проект 3-х...

Класс Матриц
Добрый вечер, у меня возникла такая проблема.Я только начал изучать классы и дуб дубом, а уже дали задание: Необходимо создать класс...

Класс матриц
Пишу класс для работы с матрицами . Не могу понять , почему не работают функции power и swap_rows (функции возвращают ту же матрицу без...

Класс матриц
есть рабочий класс матриц. Все работает отлично, но надо сделать функцию или перегрузить оператор &gt;&gt; для считывания матрицы из файла....


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru