debbathebest
03-06-2010, 16:20
Ciao ragazzi, visto che al post precedente che ho fatto non mi avete risposto, ritento con questo.
Come da titolo sto facendo un programma per il calcolo del determinante di matrici quadrate, ormai dovrebbe essere finito, tuttavia non funziona.
Ecco il codice, il problema sta sicuramente nei 2 for, ma non riesco a capire quale sia:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class applet_det extends JFrame
implements ActionListener {
JTextField righe;
JPanel cont_tab;
JLabel titolo;
JTable tabella;
JButton calcola;
int rig_int;
int matrice [][]= new int[rig_int][rig_int];
Font font;
JScrollPane sp;
DefaultTableModel dtm;
public applet_det() {
Container layout = getContentPane();
layout.setLayout(new BorderLayout());
titolo = new JLabel("Calcolo determinante matrici quadrate");
layout.add(titolo, BorderLayout.NORTH);
JPanel corpo = new JPanel();
JPanel header = new JPanel();
JLabel cons = new JLabel("Righe e colonne (max 6):");
header.add(cons);
righe = new JTextField(5);
righe.addActionListener(this);
header.add(righe);
corpo.add(header);
cont_tab = new JPanel();
dtm = new DefaultTableModel();
tabella = new JTable(dtm);
sp = new JScrollPane(tabella);
sp.setVisible(false);
cont_tab.add(sp);
corpo.add(cont_tab);
calcola = new JButton("calcola!");
calcola.addActionListener(this);
corpo.add(calcola);
layout.add(corpo, BorderLayout.NORTH);
this.pack();
}
public void actionPerformed(ActionEvent evt) {
Object src = evt.getSource();
if (src == calcola){ // qui dovrebbe essere il problema
for (int i=0; i<rig_int; i++) {
for (int j=0; j<rig_int; j++) {
//String c=tabella.getModel().getValueAt(i, j).toString();
Object estraz=tabella.getModel().getValueAt(i, j);
matrice[i][j] = Integer.parseInt(estraz.toString());
}
}
long d = det(matrice, rig_int);
JOptionPane.showMessageDialog(null, d , "Calcolo Determinante Matrice", 1);
}
else {
try {
rig_int = Integer.valueOf(righe.getText());
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(null, "Non è ammesso l'inserimento di valori alfanumerici!", "Calcolo Determinante Matrice", 1);
}
if (rig_int < 2 || rig_int > 6) {
JOptionPane.showMessageDialog(null, "Le righe possono variare da 2 a 6", "Calcolo Determinante Matrice", 1);
} else {
dtm.setColumnCount(rig_int);
dtm.setRowCount(rig_int);
sp.setVisible(true);
this.pack();
}
}
}
// copiato ASSOLUTAMENTE non roba mia
private static long det(int mat[][], int ord) {
long l = 0L;
if(ord == 1) l = mat[0][0];
else if(ord == 2) l = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
else {
int matm1[][] = new int[ord - 1][ord - 1];
for(int col = 0; col < ord; col++) {
for(int ri = 1; ri < ord; ri++) {
int nuovacol = 0;
for(int scan = 0; scan < ord; scan++)
if(scan != col) {
matm1[ri - 1][nuovacol] = mat[ri][scan];
nuovacol++;
}
}
if(col % 2 == 0) l += (long)mat[0][col] * det(matm1, ord - 1);
else l -= (long)mat[0][col] * det(matm1, ord - 1);
}
}
return l;
}
public static void main(String[] args)
{
new applet_det().setVisible(true);
}
}
Se avete possibilità di darci un'occhiata mi fate un favore!
Come da titolo sto facendo un programma per il calcolo del determinante di matrici quadrate, ormai dovrebbe essere finito, tuttavia non funziona.
Ecco il codice, il problema sta sicuramente nei 2 for, ma non riesco a capire quale sia:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class applet_det extends JFrame
implements ActionListener {
JTextField righe;
JPanel cont_tab;
JLabel titolo;
JTable tabella;
JButton calcola;
int rig_int;
int matrice [][]= new int[rig_int][rig_int];
Font font;
JScrollPane sp;
DefaultTableModel dtm;
public applet_det() {
Container layout = getContentPane();
layout.setLayout(new BorderLayout());
titolo = new JLabel("Calcolo determinante matrici quadrate");
layout.add(titolo, BorderLayout.NORTH);
JPanel corpo = new JPanel();
JPanel header = new JPanel();
JLabel cons = new JLabel("Righe e colonne (max 6):");
header.add(cons);
righe = new JTextField(5);
righe.addActionListener(this);
header.add(righe);
corpo.add(header);
cont_tab = new JPanel();
dtm = new DefaultTableModel();
tabella = new JTable(dtm);
sp = new JScrollPane(tabella);
sp.setVisible(false);
cont_tab.add(sp);
corpo.add(cont_tab);
calcola = new JButton("calcola!");
calcola.addActionListener(this);
corpo.add(calcola);
layout.add(corpo, BorderLayout.NORTH);
this.pack();
}
public void actionPerformed(ActionEvent evt) {
Object src = evt.getSource();
if (src == calcola){ // qui dovrebbe essere il problema
for (int i=0; i<rig_int; i++) {
for (int j=0; j<rig_int; j++) {
//String c=tabella.getModel().getValueAt(i, j).toString();
Object estraz=tabella.getModel().getValueAt(i, j);
matrice[i][j] = Integer.parseInt(estraz.toString());
}
}
long d = det(matrice, rig_int);
JOptionPane.showMessageDialog(null, d , "Calcolo Determinante Matrice", 1);
}
else {
try {
rig_int = Integer.valueOf(righe.getText());
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(null, "Non è ammesso l'inserimento di valori alfanumerici!", "Calcolo Determinante Matrice", 1);
}
if (rig_int < 2 || rig_int > 6) {
JOptionPane.showMessageDialog(null, "Le righe possono variare da 2 a 6", "Calcolo Determinante Matrice", 1);
} else {
dtm.setColumnCount(rig_int);
dtm.setRowCount(rig_int);
sp.setVisible(true);
this.pack();
}
}
}
// copiato ASSOLUTAMENTE non roba mia
private static long det(int mat[][], int ord) {
long l = 0L;
if(ord == 1) l = mat[0][0];
else if(ord == 2) l = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
else {
int matm1[][] = new int[ord - 1][ord - 1];
for(int col = 0; col < ord; col++) {
for(int ri = 1; ri < ord; ri++) {
int nuovacol = 0;
for(int scan = 0; scan < ord; scan++)
if(scan != col) {
matm1[ri - 1][nuovacol] = mat[ri][scan];
nuovacol++;
}
}
if(col % 2 == 0) l += (long)mat[0][col] * det(matm1, ord - 1);
else l -= (long)mat[0][col] * det(matm1, ord - 1);
}
}
return l;
}
public static void main(String[] args)
{
new applet_det().setVisible(true);
}
}
Se avete possibilità di darci un'occhiata mi fate un favore!