Witam.

Napisałem program w javie obliczający równania Cramera (metoda Gaussa), podajemy macierz współczynników i kolumnę wyrazów wolnych.

Program w java:

import java.io.*;
import java.lang.Double;

public class Macierz2 {

    int roz;
    int wier;
    int kolu;
    private double [][] tab;
    private double [] tabB;
    BufferedReader wej= new BufferedReader( new InputStreamReader(System.in));
    StreamTokenizer st = new StreamTokenizer(wej); // argument typu Reader
    PrintWriter wyj= new PrintWriter( new BufferedWriter(new OutputStreamWriter(System.out)),true);

    double tabX [];
 
    public void doTroj() {
        
        for (int k=0; k<roz; k++) {
        for (int i=k; i<wier;i++) {
            double a=tab[i][k];
            for (int j=k; j<kolu; j++) {
                if (i==k) {
                    tab[k][j] = (tab[k][j] / a);
                }
                else {
                tab[i][j] = tab[i][j] - (a * tab[k][j]);  // wiersz nowy = wiersz - element * wiersz 1
                }
                
            }
        }
        }
    }
        //jednostkowa
    public void doJednostkowej() {
        
    
    for (int i=wier-2;i>=0;i--) {
        for (int j=i+1;j<kolu-1;j++) odejmowanieWierszy(i,tab[i][j],j);
    }
      
}

    public void odejmowanieWierszy(int nrWiersza, double czynnik, int innyNrWiersza) {
        for (int j=0;j<kolu;j++) {
            tab[nrWiersza][j] = tab[nrWiersza][j] - czynnik*tab[innyNrWiersza][j];
        }
    }
   
    public void wyswietl() {
        for (int i=0; i<wier;i++) {
            for (int j=0; j<kolu; j++) {
                System.out.print(tab[i][j]+"   ");
            }
            System.out.println();
         }
            System.out.println();
    }
    
    public void wyswietl2() {
        for (int i=0; i<wier;i++) {
            for (int j=0; j<kolu; j++) {
                Double a=tab[i][j];
                System.out.print(Math.round(a)+"   ");
            }
            System.out.println();
         }
            System.out.println();
    }
    
    public Macierz2() {
        wyj.println("Podaj rozmiar:"); wyj.flush();
        try {
            st.nextToken();
            roz=wier=(int)st.nval;
            kolu=wier+1;
            tab=new double [roz][roz+1];
            tabB = new double [roz];
            wyj.println("Podaj elementy macierzy wspolczynnikow: "); wyj.flush();
            for (int i=0;i<roz;i++) 
                for (int j=0;j<roz;j++) {
                    st.nextToken();
                    tab[i][j]=st.nval;
                }
            wyj.println("Podaj elementy kolumny wyrazo wolnych:"); wyj.flush();
            for (int j=0;j<roz;j++) {
                    st.nextToken();
                    double a=st.nval;
                    tabB[j]=a;
                    tab[j][kolu-1]=a;
                }
        } catch(IOException e){System.out.println("Blad wczytania");}
    }      
}

no i wszystkie metody działają dobrze :)

Po przetworzeniu do C/C++ mam:

#include <iostream> 
#include <stdio.h> 
#include <math.h> 

using namespace std; 


   int roz=30; 
   int wier; 
   int kolu; 
double tab [30][30]; 


int main() { 
int liczba; 
cout << "Podaj rozmiar tablicy wspolczynnikow: "; 
scanf ("%i", &roz); 
wier=roz; 
kolu=wier+1; 
cout << "Podaj elementy macierzy wspolczynnikow: "; 
for (int i=0;i<roz;i++) { 
for (int j=0;j<roz;j++) { 
scanf ("%d", &tab[i][j]); 
} 
} 
cout << "Podaj elementy kolumny wyrazow wolnych:"; 
   for (int j=0;j<roz;j++) { 
double a; 
scanf ("%d", &a); 
tab[j][roz]=a; 
} 

// wyswietl macierz rozszerzona 

cout << "\nMacierz wspolczynnikow rozszerzona o kolumne wyrazow wolnych"; 
cout << "\nLiczba wierszy: "; 
cout << wier; 
cout << "\nLiczba kolumn: "; 
cout << kolu; 
cout << "\n\n"; 
for (int i=0; i<wier;i++) { 
           for (int j=0; j<kolu; j++) { 
               printf (" %i     ", tab[i][j]); 
           } 
           cout << "\n"; 
} 
           cout << "\n"; 
 
// do trojkatnej 
for (int k=0; k<roz; k++) { 
for (int i=k; i<wier;i++) { 
double a=tab[i][k]; 
           for (int j=k; j<kolu; j++) { 
               if (i==k) { 
                   tab[k][j] = (tab[k][j] / a); 
               } 
               else { 
               tab[i][j] =- (a * tab[k][j]);  // wiersz nowy = wiersz - element * wiersz poprzedni 
               } 
           } 
       } 
} 


// do jednostkowej 
   for (int i=wier-2;i>=0;i--) { 
for (int j=i+1;j<kolu-1;j++) { 
// odejmowanie wierszy 

for (int k=0;k<kolu;k++) { 
tab[i][k] =- tab[i][j]*tab[j][k]; 
}  
} 
} 

// wyswietl 
for (int i=0; i<wier;i++) { 
           for (int j=0; j<kolu; j++) { 
               printf (" %i     ", tab[i][j]); 
           } 
           cout << "\n"; 
   } 
           cout << "\n"; 

// wyswietl wynik (macierz kolumnowa X) 
           for (int i=0; i<wier; i++) { 
               printf (" %i     \n", tab[kolu][i]); 
           } 
           cout << "\n";
cin >> liczba ; 

}

I wyniki wychodzą różne ... nie znam przyczyny... nie wiem jak poprawić ... ktoś pomoże?