[C++] normy macierzy

matma17
Użytkownik
Użytkownik
Posty: 157
Rejestracja: 5 gru 2008, o 17:04
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C++] normy macierzy

Post 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?
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C++] normy macierzy

Post 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
ODPOWIEDZ