Witam wszystkich którym chciało sie tu zajrzeć.
Na początek przedstawię co chciałem zrobić:
mianowicie w bliżej nieokreślonym celu ;-P chce utworzyć macierz której komórki będą miały wartości zgodnie z wzorem:
A[i][j]=sqrt(2*j+1)*(silnia(i)*silnia(i))/(silnia(i+j+1)*silnia(i-j))
Wzór ten jest też pod adresem(czytelniejsza forma):
http://www.imagic.pl/public/pview/121758/index_1.gif
Rezultat moich wypocin jest poniżej :-)
Teraz problem:
Przy rozmiarach macierzy np: n= 9 otrzymuje bardzo duże lub ujemne wyniki w komórkach z duzymi indeksami np: M[9][9] co nie powinno mieć miejsca, natomiast przy małych rozmiarach macierzy wszytko gra [green] .
Stąd doszedłem do wniosku ze ponieważ używam silni to może następować przepełnienie zmiennych, jednak użycie zmiennych typu long nie pomogło [glowa]
wyniki otrzymane za pomocą specjalistycznego programu :> są pod adresem(czyli takie jakie powinny być) jest:
http://www.imagic.pl/public/pview/121759/dddd.gif
wyniki z progrmu mojego:
http://www.imagic.pl/public/pview/121763/index_1.gif
Za wszelkie wskazówki jak sie z tym uporać i poświęcony czas z góry thx:
oto rezultat moich wypocin kompilowany pod visual studio c++ 6.0:
#include <iostream>
#include <cmath>
#include <stdio.h>
#include <fstream>//operacje na plikach
using namespace std;
#define SIZE 15
long double A[SIZE][SIZE];
// funkcja zapisujaca do pliku
void Zapisz(int n)
{
FILE * pFile;
int i,j;
pFile = fopen ("dane.txt","a");
// umieszcza odpowiedni napis przed macierza
// zapis macierzy
for(i=0;i<n;i++)
{
fprintf (pFile,"|");
for(j=0;j<n;j++)
{
fprintf (pFile,"% lf ", A[i][j]);
}
fprintf (pFile,"| \n");
}
fclose (pFile);
}
// funkcja pomocnicza obliczajaca silnie
long int silnia(int i)
{
int k;
long int wynik=1;
for(k=1;k<=i;k++)
wynik=wynik*k;
return wynik;
}
// macierz
void dL(int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i-j>=0)
A[i][j]=sqrt(2*j+1)*(silnia(i)*silnia(i))/(silnia(i+j+1)*silnia(i-j));
else A[i][j]= 0.0;
}
}
//drukowanie macierzy
cout<<"Macierz L z daszkiem:"<<endl;
for(i=0;i<n;i++)
{
cout<<"|";
for(j=0;j<n;j++)
{
printf("% 2.5lf ", A[i][j]);
}
cout<<"|"<<endl;
}
Zapisz(n);
}
int main(int argc, char* argv[]){
dL(9);
return 0;
}