Strona 1 z 1

[C++] normy macierzy

: 14 sty 2014, o 16:01
autor: matma17
Witam,
Skleciłem na szybko taki program.

Kod: Zaznacz cały

#include <iostream>
#include<cmath>

using namespace std;

class mac
{
	private:
	int k, w;
	double**tab;
	public:
	void wprowadz();
	double frobenius();	
	double pierwsza_norma();
	double inf_norma();
	void wypisz();
	
};
void mac::wypisz()
{
	for ( int i = 0; i < w; ++i)
	{
		cout<<endl;
		cout<<"| ";
		for ( int j = 0; j < k; ++j)
		cout<<tab[i][j]<<" | ";
	}
	cout<<endl;
}
void mac::wprowadz()
{
	double tmp; 
	cout<<"Podaj liczbe kolumn:" ; 
	cin>>k;
	cout<<"Podaj liczbe wierszy:" ; 
	cin>>w;
	tab = new double *[w]; 
	for ( int i = 0; i < w; ++i )
	{
		tab[i] = new double [k]; 
		for ( int j = 0; j < k; ++j) 
		{
			cout<<"Podaj wartosc A" <<i+1<<j+1<<endl;
			cin>>tmp;
			tab[i][j]=tmp;
		}
	}
};
double mac::frobenius()
{ 
	double frob1;
	double frob=0;
	for ( int i = 0; i < w; i++)
	{
		for ( int j = 0; j < k; j++)
		{
			frob+=pow(tab[i][j], 2.0);
		}
	}
	frob1=pow(frob, 0.5);
	return frob1 ;
};
double mac::pierwsza_norma()
{
	double* tabmax = new double(k);
	double max;
	for ( int i = 0; i < k; i++)
	{
		max=0;
		for ( int j = 0; j <w; j++)
		{
			max+=tab[j][i];
		}
		tabmax[i]=max;
	}
	max=-1.8e38;
	for(int i=0; i<k; i++)
	{
		if(tabmax[i]>max)
		{
			max=tabmax[i];
		}
	}
	delete[] tabmax;
	return max;
}
double mac::inf_norma()
{
	double* tab_inf = new double(w);
	double max_inf;
	for ( int i = 0; i < w; i++)
	{
		max_inf=0;
		for ( int j = 0; j < k; j++)
		{
			max_inf+=tab[i][j];
		}
		tab_inf[i]=max_inf;
	}
	max_inf=-1.8e38;
	for(int i=0; i<w; i++)
	{
		if(tab_inf[i]>max_inf)
		{
			max_inf=tab_inf[i];
		}
	}
	delete[] tab_inf;
	return max_inf;
}
int main()
{
	mac m1;
	m1.wprowadz();
	m1.wypisz();
	double f=m1.frobenius();
	cout<<"Norma Frobeniusa: "<<f<<endl;
	double p=m1.pierwsza_norma();
	cout<<"Pierwsza norma: "<<p<<endl;
	double i=m1.inf_norma();
	cout<<"Inf norma: "<<i<<endl;
	return 0;
}
Na moje oko niby jest ok ale zawiesza się przy obliczaniu pierwsze i inf normy. dla macierzy kwadratowej działa poprawnie, dla innych nie. Pewnie jest jakiś banalny błąd którego nie mogę zauważyć. Nie mam mi kto tego sprawdzić. Może Wy widzicie co jest nie tak?

[C++] normy macierzy

: 20 sty 2014, o 15:05
autor: witekkq
Różnica pomiędzy

Kod: Zaznacz cały

double* tab_inf = new double(w);
a

Kod: Zaznacz cały

double* tab_inf = new double[w];
jest dość znaczna