mam taki prosty programik tworzący macierz o zadanych rozmiarach. Użytkownik z klawiatury przesyła żądaną wielkość tej macierzy, a program wpisuje wartości do tych macierzy. Dodatkowo posiadam klasę, a macierz to po prostu obiekt. Prześlę na razie w fragmentach kod . oto mój plik:
#include <iostream>
#include <time.h>
#include "macierz.h"
using namespace std;
int main()
{
srand(time(NULL));
int M,N;
cout<<"1.Utworzenie tablicy"<<endl;
cout << "Podaj ilosc wierszy: " << endl;
cin>>M;
cout << "Podaj ilosc kolumn: " << endl;
cin>>N;
Macierz m1(M,N);
m1.wypisz();
float **tablica;
tablica=new float*[M];
for(int i=0; i<M; i++)
{
tablica[i]=new float[N];
}
for(int i=0; i<M; i++)
{
for (int j=0; j<N; j++)
{
tablica[i][j]=float(i+1)/float(j+1);
}
}
Macierz m2(M,N),m3(M,N),m4(M,N),m5(M,N);
cout<<"Jednoargumentowy +(1)"<<endl;
m3+1;
m3.wypisz();
cout<<endl;
cout<<"Jednoargumentowy -(1)"<<endl;
m4-1;
m4.wypisz();
cout<<endl;
cout<<"Przypisania ="<<endl;
m5=1;
m5.wypisz();
cout<<endl;
cout<<"+"<<endl;
m5=m2+m3;
m5.wypisz();
cout<<endl;
return 0;
}
To mój plik macierz.h
#include <iostream>
using namespace std;
class Macierz
{
public:
int m, n, x, y;
float **macierz;
Macierz(int=0,int=0);
Macierz(float**,int,int);
Macierz(Macierz &);
~Macierz();
Macierz& operator+(int);
Macierz& operator-(int);
Macierz& operator=(int);
Macierz operator+(Macierz);
int wiersze();
int kolumny();
void wypisz();
void generujlosowe();
void zmienrozmiar(int=0, int=0);
};
a to macierz.cpp
#include <iostream>
#include "macierz.h"
using namespace std;
Macierz::Macierz(int w, int k)
{
m=w;
n=k;
macierz=new float*[m];
for(int i=0; i<m; i++)
{
macierz[i]=new float[n];
}
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
macierz[i][j]=i+j;
}
}
x=m;
y=n;
}
Macierz::Macierz(float** tabl, int s, int k)
{
m=s;
n=k;
macierz=new float*[m];
for(int i=0; i<m; i++)
{
macierz[i]=new float[n];
}
for(int i=0; i<s; i++)
{
for(int j=0; j<k; j++)
{
macierz[i][j]=tabl[i][j];
}
cout<<endl;
}
}
Macierz::~Macierz()
{
for(int i = 0; i <m; ++i) {
delete[] macierz[n];
}
delete[] macierz;
macierz = NULL ;
}
void Macierz::wypisz()
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cout<<macierz[i][j]<<" ";
}
cout<<endl;
}
}
void Macierz::generujlosowe()
{
float a = 0.0;
float b = 1.0;
for ( int i = 0 ; i < m ; i++) {
for ( int k = 0 ; k < n ; k ++) {
macierz[i][k] = ((float)rand() / RAND_MAX) * (b - a) + a;
}
}
}
void Macierz::zmienrozmiar(int d, int j)
{
m=d;
n=j;
float **tablica;
tablica=new float*[m];
for(int i=0; i<m; i++)
{
tablica[i]=new float[n];
}
for(int i = 0; i <x; ++i) {
delete[] macierz[y];
}
delete [] macierz;
macierz=new float*[m];
for(int i=0; i<m; i++)
{
macierz[i]=new float[n];
}
}
Macierz::Macierz(Macierz &obiekt) {
m = obiekt.m;
n = obiekt.n;
macierz = new float*[m];
for ( int i = 0 ; i < m; i++) {
macierz[i] = new float[n];
}
for ( int j = 0 ;j < m ; j++) {
for ( int k = 0 ; k < n ; k++) {
macierz[j][k] = obiekt.macierz[j][k];
}
}
}
int Macierz::wiersze()
{
return m;
}
int Macierz::kolumny()
{
return n;
}
Macierz& Macierz::operator+(int a1)
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
macierz[i][j]+=a1;
}
}
}
Macierz& Macierz::operator-(int a2)
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
macierz[i][j]-=a2;
}
}
}
Macierz& Macierz::operator=(int a3)
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
macierz[i][j]=a3;
}
}
}
Macierz Macierz::operator+(Macierz c1)
{
Macierz d(*this);
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
d.macierz[i][j]+=c1.macierz[i][j];
}
}
return d;
}
Noi m i n to są poprostu wartości pobrane z klawiatury czyli rozmiar tej macierzy. Przechowywane są one w klasie. Robiłem testy czy mi gdzieś nie zmienia tych wartości program i wszystko jest okej wartości sprawdzałem przed samym wywołaniem m5.wypisz(). Bo jeśli wpiszę wartości, ktore mają taki sam rozmiar na przykład 4 i 4 to wszystko ładnie dodaje natomiast jeśli zmienię wartości np 4 i 5 to juz sie sypie i wychodzą jakieś wartości "2.56507e-038" i nic nie działa albo jak wpiszę 4 i 9 to mi 2 pierwsze wiersze psuje a 2 kolejne są ok.