Witam, poniższy program był prezentowany w prezentacji na zajęciach. Wedle owej prezentacji program działał, natomiast gdy chciałem go przepisać aby sprawdzić samemu jak działa to wyskoczyły błędy które umieszczę pod kodem. W skrócie dotyczą one funkcji 'wyswietl' oraz bledy 'ISO C++'. Z góry dziękuję za wszelką pomoc.
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
using namespace std;
int n;
double **stworz()
{
int n;
double **macierz=new double *[n];
for(int i=0;i<n;i++)
{
macierz[i]=new double[n*n];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
macierz[i][j]=0;
}
}
return macierz;
}
void wyswietl(double**&macierz,int *n)
{
for(int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
cout<<setprecision(2)<<macierz[i][j]<<'\t';
}
cout<<endl;
}
}
void kasuj(double **&macierz)
{
for(int i=0;i<n;i++)
{
delete[]macierz[i];
}
delete[]macierz;
}
void wypelnij(double **&macierz)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<"Podaj wartosci macierzy [" <<i+1 <<","<<j+1<<"]: ";
cin>>macierz[i][j];
}
}
}
void wypelnij_losowo(double **&macierz)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
macierz[i][j]=rand()%20-10;
}
}
}
double det_2stopien(double **&macierz)
{
double det;
det = macierz[0][0]*macierz[1][1] - macierz[0][1]*macierz[1][0];
return det;
}
double **transponowanie(double **&macierz)
{
double **t=stworz();
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
t[i][j] = macierz[j][i];
}
}
return t;
}
double **dopelnienia(double **&macierz)
{
double **d=stworz();
d[0][0]=macierz[1][1];
d[0][1]=macierz[1][0];
d[1][0]=macierz[0][1];
d[1][1]=macierz[0][0];
return d;
}
double **odwrotna_wzor(double **&macierz)
{
double det = det_2stopien(macierz);
cout<<endl;
cout<<"Wyznacznik macierzy docelowej: "<<det<<endl;
double **wynik=stworz();
cout<<endl;
wynik=dopelnienia(macierz);
cout<<"DOPELNIENIA"<<endl;
wyswietl(wynik);
cout<<endl;
wynik=transponowanie(wynik);
cout<<"TRANSPONOWANA DOPELNIENIA"<<endl;
wyswietl(wynik);
cout<<endl;
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
wynik[i][j]/=det;
}
}
return wynik;
}
void jednostkowa(double **&macierz)
{
for(int i=0;i<n;i++)
{
for(int j=n;j<n*n;j++)
{
macierz[i][j]=0;
}
}
for(int i=0;i<n;i++)
{
macierz[i][i+2]-1;
}
}
void metoda_gaussa(double **&macierz)
{
double c,d;
for(int i=0;i<n;i++)
{
c = macierz[i][i];
macierz[i][i]=macierz[i][i]-1;
for(int j=i+1;j<n*n;j++)
{
if(c==0)
{
d=0;
}
else
{
d = macierz[i][j]/c;
}
for(int k=0;k<n;k++)
{
macierz[k][j]=macierz[k][j]-d*macierz[k][i];
}
}
}
}
void wyswietlodwrotna(double **&macierz)
{
for(int i=0;i<n;i++)
{
for(int j=n;j<n*n;j++)
{
cout<<setprecision(2)<<macierz[i][j]<<'\t';
}
cout<<endl;
}
}
int main()
{
int n;
srand(time(NULL));
int wybor_macierzy;
int wybor_sposobu;
double **macierz=stworz();
cout <<"wybierz sposob tworzenia macierzy:\n1.wypisz z klawy \n2.liczby pseudokodowe"<<endl;
cin>>wybor_macierzy;
cout<<endl;
switch(wybor_macierzy)
{
case 1:
{
wypelnij(macierz);
cout<<endl;
cout<<"Twoja macierz: "<<endl;
wyswietl(macierz);
cout<<endl;
if(det_2stopien(macierz)==0)
{
cout<<"Wyznacznik Twojej macierzy wynosi 0. Nie mozna policzyc macierzy odwrotnej."<<endl;
exit(0);
}
break;
cout<<endl;
}
case 2:
{
wypelnij_losowo(macierz);
cout<<"Twoja macierz: " << endl;
wyswietl(macierz);
if(det_2stopien(macierz)==0)
{
cout<<"Wyznacznik Twojej macierzy wynosi 0. Nie mozna policzyc macierzy odwrotnej."<<endl;
exit(0);
}
break;
cout<<endl;
}
default:
{
cout<<"Niepoprawny wybor!"<<endl;
exit(0);
break;
}
}
cout << "\nWybierz sposob liczeia macierzy odwrotnej:\n1.Macierz odwrotna ze wzoru\2."<<endl;
cin>>wybor_sposobu;
switch(wybor_sposobu)
{
case 1:
{
double **odwrotna=odwrotna_wzor(macierz);
cout<<"MACIERZ ODWROTNA: "<<endl;
wyswietl(odwrotna);
break;
}
case 2:
{
jednostkowa(macierz);
metoda_gaussa(macierz);
cout<<"MACIERZ ODWROTNA: "<<endl;
wyswietlodwrotna(macierz);
break;
}
default:
{
cout<<"Niepoprawny wybor!"<<endl;
exit(0);
break;
}
}
return 0;
}
Błędy które napotkałem: