|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.10.2009, 20:55 | #1 |
Новичок
Джуниор
Регистрация: 03.10.2009
Сообщений: 1
|
Класс матрица, вывод результатов на экран
Есть класс матрица и класс число. В матрицу должны заносится числа int/int, то есть, например, пользователю предлагается ввести сисло а=1 и число b=2, тогда в матрицу занесется элемент a/b(1/2). Проблема в том. что когда ввожу вторую матрицу и умножаю(сложиваю) ее с исходной матрицей, то на экран выводится мусор, программа зацикливается. Помогите найти причину или ошибку, вот код:
#include<iostream.h> #include<stdio.h> #include<conio.h> class Chislo { int a; int b; public: Chislo mult1(Chislo &i, Chislo &j); Chislo sum1(Chislo &i, Chislo &j); Chislo sub1(Chislo &i, Chislo &j); Chislo div1(Chislo &i, Chislo &j); void Vvod(); void Vuvod(); }; class Matrisa { Chislo *Mas; public: friend Chislo; int N; void GetSet(int x); Matrisa mult (Matrisa&A); Matrisa sum (Matrisa&A); Matrisa sub(Matrisa&A); Matrisa del (Matrisa&A); // Matrisa(); // ~Matrisa(); void POSTROENIE (); void VIVOD (); }; void Chislo::Vvod() { cout<<"Vvedite a, b"<<endl; cout<<"Vvedite b:"; cin>>a; cout<<"Vvedite a:"; cin>>b; } void Chislo::Vuvod() { printf("%d/%d",a,b); } void Matrisa::POSTROENIE () { cout<<"Kol-vo elementov :"; cin>>N; Mas=new Chislo[N*N]; for (int i=0;i<N;i++) for (int j=0;j<N;j++) { cout<<"Vvedite znachenia "<< i << j <<" elementov"<<endl; Mas[i*N+j].Vvod(); } } void Matrisa::VIVOD() { cout << "Matrica :\n" << endl; for (int i=0;i<N;i++) { cout<<" "; for (int j=0;j<N;j++) { Mas[i*N+j].Vuvod(); cout<<" "; } cout << endl; } } void Matrisa::GetSet(int x) { Mas=new Chislo[x*x]; } Chislo Chislo::mult1(Chislo &i, Chislo &j) { Chislo t; t.a=i.a*j.a; t.b=i.b*j.b; return t; } Matrisa Matrisa::mult (Matrisa&A) { if(A.N!=this->N) {cout<<"Razmeru matricu dolzhnu sovpadat'. Vuvod matr.:\n"; return A;} else{ //cout<<"Umnozhenie matric: \n"; Matrisa C; C.GetSet(A.N); for (int x=0;x<A.N;x++) for (int y=0; y<A.N; y++) C.Mas[x*A.N+y]=C.Mas[x*A.N+y].mult1 (A.Mas[x*A.N+y],Mas[y*A.N+x]); return C; } } Chislo Chislo::sum1(Chislo &i, Chislo &j) { Chislo t; int x=i.b*j.b; int y=(i.a*j.b)+(j.a*i.b); t.a=y; t.b=x; return t; } Matrisa Matrisa::sum(Matrisa&A) { if(A.N!=this->N) {cout<<"Razmeru matricu dolzhnu sovpadat'. Vuvod 1 matr.:\n"; return A;} else{ //cout<<"Summa matric: \n"; Matrisa C; C.GetSet(A.N); for (int x=0;x<A.N;x++) for (int y=0; y<A.N; y++) C.Mas[x*A.N+y]=C.Mas[x*A.N+y].sum1(A.Mas[x*A.N+y],Mas[x*A.N+y]); return C; } } Chislo Chislo::sub1(Chislo &i, Chislo &j) { Chislo t; int x=i.b*j.b; int y=(i.a*j.b)-(j.a*i.b); t.a=y; t.b=x; return t; } Matrisa Matrisa::sub(Matrisa&A) { if(A.N!=this->N) {cout<<"Razmeru matricu dolzhnu sovpadat'. Vuvod 1 matr.:\n"; return A;} else{ //cout<<"Summa matric: \n"; Matrisa C; C.GetSet(A.N); for (int x=0;x<A.N;x++) for (int y=0; y<A.N; y++) C.Mas[x*A.N+y]=C.Mas[x*A.N+y].sub1(A.Mas[x*A.N+y],Mas[x*A.N+y]); return C; } } Chislo Chislo:iv1(Chislo &i, Chislo &j) { Chislo t; t.a=i.a*j.b; t.b=i.b*j.a; return t; } Matrisa Matrisa:el(Matrisa&A) { if(A.N!=this->N) {cout<<"Razmeru matricu dolzhnu sovpadat'. Vuvod 1 matr.:\n"; return A;} else{ //cout<<"Umnozhenie matric: \n"; Matrisa C; C.GetSet(A.N); for (int x=0;x<A.N;x++) for (int y=0; y<A.N; y++) C.Mas[x*A.N+y]=C.Mas[x*A.N+y].div1(A.Mas[x*A.N+y],Mas[y*A.N+x]); return C; } } void main() { Matrisa C, A; int c; do { clrscr(); cout<<"Zapolnenie ishodnoy matricu:->1\n"; cout<<"Gay"; cout<<"Umnozhenie matric: ->2\n"; cout<<"Summa matric:-> 3\n"; cout<<"Vuchetanie matric: ->4\n"; cout<<"delenie matric matric: ->5\n"; cout<<"Vuhod: ->0\n"; cin>>c; switch(c) { case 1: /* int c1; cout<<"Vvod matricu s klaviatury:->11/n"; cout<<"Vvod matricu s faila->12/n"; cin>>c1; switch(c1) { case 11: A.File(); A.VIVOD(); getch(); break;*/ A.POSTROENIE(); A.VIVOD(); getch(); break; case 2: C.POSTROENIE(); C.VIVOD(); A=A.mult(C); A.VIVOD(); getch(); break; case 3: C.POSTROENIE(); C.VIVOD(); A=A.sum(C); A.VIVOD(); getch(); break; case 4: C.POSTROENIE(); C.VIVOD(); A=A.sub(C); A.VIVOD(); getch(); break; case 5: C.POSTROENIE(); C.VIVOD(); A=A.del(C); A.VIVOD(); getch(); break; case 0: return; break; } }while(c!=0); getch(); } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вывод на экран | Nikolai_90 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 11 | 02.05.2012 09:25 |
Вывод результатов! | Серый Рыйцарь | Помощь студентам | 3 | 21.05.2009 07:46 |
Как осуществить ввод данных в одном цикле, их обработку в другом, и вывод результатов в третьем? | ReM | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 11.11.2008 18:21 |
Вывод на 2-ой экран | DShiller | Общие вопросы Delphi | 0 | 26.05.2008 15:25 |
Вывод результатов в другой Grid | Barbara | БД в Delphi | 7 | 20.02.2007 15:14 |