Регистрация: 26.09.2011
Сообщений: 7
|
Работа с комплексными числами и файлами (Visual С++)
Здравствуйте!
В задании нужно с использованием класса комплексных чисел создать две не квадратные матрицы B и C, записать в файл потом считать и перемножить, ну и еще кое чего сделать (остальное работает). Проблема в том что не получается создать не квадратную матрицу.Если задаю размерность матрицы В 4 на 3, то удается создать первые 9 элементов. В этом коде класс писался для предыдущего задания где использовались только квадратные матрицы - все было нормально, а сейчас выявилась проблема.
Код:
#include "zag.h"
using namespace std;
class Complex
{
double Re;
double Im;
public:
Complex() {};
Complex(double R)
{Re = R; Im = 0;}
Complex(double R, double I)
{ Re = R, Im = I;}
~Complex() {} ;
Complex input(FILE *w, Complex &); //метод считывания элементов с файла
Complex output(FILE *w, Complex &); //метод записи элементов в файл
friend ostream &operator<<(ostream &, Complex &); //перегрузка вывода
friend istream &operator>>(istream &, Complex &); //перегрузка ввода
};
Complex Complex::input(FILE *w, Complex &z)
{
fscanf(w,"%lf",&z.Re);
fseek(w,3,SEEK_CUR);
fscanf(w,"%lf",&z.Im);
fseek(w,1,SEEK_CUR);
return z;
}
Complex Complex::output(FILE *w, Complex &z)
{
fprintf(w,"%6.2lf+i(%6.2lf)\t",z.Re,z.Im);
return z;
}
ostream &operator<< (ostream &z2, Complex &z)
{
if (z.Re != 0 && z.Im < 0)
printf("(%6.2lf-i*%6.2lf)\t",z.Re,-z.Im);
if (z.Re != 0 && z.Im == 0)
printf("(%6.2lf)\t\t",z.Re);
if (z.Re != 0 && z.Im > 0)
printf("(%6.2lf+i*%6.2lf)\t",z.Re,z.Im);
if (z.Re == 0 && z.Im < 0)
printf("(-i*%6.2lf)\t\t",-z.Im);
if (z.Re == 0 && z.Im == 0)
printf("( 0 )\t\t\t");
if (z.Re == 0 && z.Im > 0)
printf("(i*%6.2lf)\t\t",z.Im);
return z2;
}
istream &operator>>(istream &z3, Complex &z)
{
cout<<"Введите действительную часть: "; z3>>z.Re;
cout<<"Введите мнимую часть: "; z3>>z.Im; cout<<endl;
return z3;
}
void main()
{
Complex **A,**B,**C,**b,**c;
int N,P,M,K,L,I=0;
int n,m,i,w,p,l,j;
FILE *finD, *finB, *finC,*fout,*fin,*fB,*fC;
char res[5];
for(;;)
{ system("cls");
for(;;)
{
cout<<"Введите номер вариантa от 1 до 3: "; cin>>l;
cout<<"Введите кол-во строк матрицы В: "; cin>>n;
cout<<"Введите кол-во столбцов матрицы В и строк матрицы С : "; cin>>m;
cout<<"Введите кол-во столбцов матрицы С: "; cin>>p;
if(n<=0 || m<=0 || p<=0 || l<1 || l>3)
printf("\nВходые данные не верны. Попробуйте снова...\n");
else break;
}
finD=fopen("data.txt","w");
if(finD==NULL)
{
printf("Файл не открылся");
getchar();
exit(0);
}
fprintf(finD,"%d\n",l);
fprintf(finD,"%d\n",n);
fprintf(finD,"%d\n",m);
fprintf(finD,"%d\n",p);
fclose(finD);
b=(Complex**)new Complex*[m];
for(i=0;i<m;i++)
{b[i]=(Complex*)new Complex[n];
}
cout<<"\t\t\t\tЗаполнение матрицы B"<<endl;
finB=fopen("B.txt","w");
if(finB==NULL)
{
printf("Файл не открылся");
getchar();
exit(0);
}
for(j=0;j<n;j++)
{
for(w=0;w<m;w++)
{
printf("Заполнение b[%d][%d] элемента\n",j+1,w+1);
cin>>b[j][w];
b[j][w].output(finB,b[j][w]);
}
fprintf(finB,"\n");
}
fclose(finB);
c=(Complex**)new Complex*[p];
for(i=0;i<p;i++)
{c[i]=(Complex*)new Complex[m];
}
cout<<"\t\t\t\tЗаполнение матрицы C"<<endl;
finC=fopen("C.txt","w");
if(finC==NULL)
{
printf("Файл не открылся");
getchar();
exit(0);
}
for(j=0;j<m;j++)
{
for(w=0;w<p;w++)
{
printf("Заполнение c[%d][%d] элемента\n",j+1,w+1);
cin>>c[j][w];
c[j][w].output(finC,c[j][w]);
}
fprintf(finC,"\n");
}
fclose(finC);
|