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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2009, 20:55   #1
Student_911
Новичок
Джуниор
 
Регистрация: 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();
}
Student_911 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод на экран 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