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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2012, 00:10   #1
bigildar
 
Регистрация: 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);
bigildar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение массива комплексными числами Mishaka Помощь студентам 3 14.12.2012 00:27
задача с комплексными числами.... *DImKa* Помощь студентам 6 05.01.2012 03:07
Работа с комплексными числами Аким Ба Паскаль, Turbo Pascal, PascalABC.NET 0 18.10.2011 23:45
Работа с комплексными числами в Excel (VBA макрос) bdfy Microsoft Office Excel 4 06.03.2011 23:14
Проблема с комплексными числами -=aHTPoПоС=- Помощь студентам 3 08.12.2009 21:02