Program się sypie na tablicach dwuwymiarowcyh.

0

Witam,
Mam tu fragment programu co liczy normy macierzy.

#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 max;
	double tabmax[100];
	//double *tabmax = new double(k);
	for ( int i = 0; i < k; i++)
	{	
 		for ( int j = 0; j <w; j++)
		{
 			 tabmax[i]+=abs(tab[j][i]);
 		}
	}
	max=0;
	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 tab_inf[100];
	double max_inf;
	for ( int i = 0; i < w; i++)
	{
		max_inf=0;
 		for ( int j = 0; j < k; j++)
		 {
 			 tab_inf[i]+=abs(tab[i][j]);
		 }
	}
	max_inf=0;
	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;
}

Jeżeli tablice są statyczne program działa jak należy. Przy tablicach dynamicznych się sypie, tj. zawiesza. Na moje oko wszystko jest ok. Pewnie jest jakiś błąd. Gdyby ktoś to mógł skompilować to dokładnie widać co się dzieje.

dodanie znacznika <code class="cpp"> - fp

1

uzyj vectorow. Pokoloruj kod, to pomaga w czytaniu (daj w odpowiednie znaczniki)

0

Z tego co mówi internet wynika, że taki błąd jak się u Ciebie pojawia wystepuje przy problemach z pamięcią. Może chcesz usunąć obiekt, który nie został stworzony przez new? Przyjrzyj się tej Twojej tablicy i jej usuwaniu.

0

Na vectorach działa jak należy. Ale na tablicach dynamicznych i tak błędu nie widzę. mógłby mi ktoś wskazać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1