G
Gagamel
Gast
Bin mal wieder hier 
Also das Problem ist ansich relativ einfach, man sollte eine Matrix einlesen, bestimmen ob symmetrisch oder nicht, die Transponierte bestimmen und den Sattelpunkt, falls vorhanden
Bis auf den Sattelpunkt habe ich das auch hinbekommen, aber da scheiter ich.
Ok ich weiß, dass der Sattelpunkt, einen niedrigsten Wert in der Zeile und einen höchsten in der Spalte hat.
Um das zu lösen brauche ich auf jeden Fall ein Zwischenarray. Dennoch komme ich irgendwie auf keinen vernünftigen Algorithmus
bzw
erst die niedrigsten Werte der Zeilen in ein Array --> das habe ich geschafft
Dann müßte ich bestimmen ob einer dieser Punkte der höchste in seiner Spalte ist und hier scheiter ich, der Code den ich bisher gebaut habe hat wenn überhaupt nur für einen spezifischen Fall funktioniert oder aber außer Acht gelassen, dass es auch sein kann, dass kein Sattelpunkt existiert.
Könnte mir da jemand auf die Sprnge helfen
zum Verständnis das restliche Programm.
[/code]
Also das Problem ist ansich relativ einfach, man sollte eine Matrix einlesen, bestimmen ob symmetrisch oder nicht, die Transponierte bestimmen und den Sattelpunkt, falls vorhanden
Bis auf den Sattelpunkt habe ich das auch hinbekommen, aber da scheiter ich.
Ok ich weiß, dass der Sattelpunkt, einen niedrigsten Wert in der Zeile und einen höchsten in der Spalte hat.
Um das zu lösen brauche ich auf jeden Fall ein Zwischenarray. Dennoch komme ich irgendwie auf keinen vernünftigen Algorithmus
bzw
erst die niedrigsten Werte der Zeilen in ein Array --> das habe ich geschafft
Code:
public static double sattelpunkt(double[][] matrixSat, int x, int y){
int x1=0,y1=0;
double[][] matrixZeile = new double[1][x]; //niedrigster Wert der Zeile
for (y1=0; y1<=(y-1); y1++){
matrixZeile[0][y1]=matrixSat[0][y1]+1;
for (x1=0;x1<=(x-1);x1++){
// System.out.println(matrixZeile[0][y1] +" "+matrixSat[x1][y1]);
if (matrixSat[x1][y1] < matrixZeile[0][y1]){
matrixZeile[0][y1]=matrixSat[x1][y1];
}
}
Dann müßte ich bestimmen ob einer dieser Punkte der höchste in seiner Spalte ist und hier scheiter ich, der Code den ich bisher gebaut habe hat wenn überhaupt nur für einen spezifischen Fall funktioniert oder aber außer Acht gelassen, dass es auch sein kann, dass kein Sattelpunkt existiert.
Könnte mir da jemand auf die Sprnge helfen
zum Verständnis das restliche Programm.
Code:
import java.util.*;
import java.io.*;
public class Aufgab2_beta
{
static boolean neustart=false;
public static void main( String args[] )
{
int x=0,y=0;
Scanner sc = new Scanner(System.in);
boolean symmetrisch;
do{
System.out.println("Bitte geben sie die Matrixdimension mit Leerzeichen getrennt ein (Spalten Zeilen)");
try {
neustart=false; //boolean für Neustart bei Falscheingabe
x=sc.nextInt(); //Spaltenanzahl
y=sc.nextInt(); //Zeilenanzahl
}
catch (Exception e){
System.out.println("Ungueltige Angabe");
sc.next();
neustart=true;
}
}
while (neustart==true);
double[][] matrix = new double[x][y]; //Array mit x Spalten und y Zeilen
double[][] matrixTrans = new double[y][x];
double sattel;
matrix=einlesen(x,y); //Eingaberoutine der Matrix. Übergeben werden x und y für die
//Matrixausmeßungen
matrixAusgabe(matrix,x,y); //Ausgabe der eingegebenen Matrix mit y Zeilen und x Spalten
symmetrisch = symmetrieCheck(matrix,x,y);
matrixTrans = transpo(matrix,x,y);
System.out.println("\n \n \n");
matrixAusgabe(matrixTrans,y,x);
//sattel = sattelpunkt(matrix,x,y);
//System.out.println("\n \n \n");
//System.out.println(sattel);
}
public static double[][] einlesen(int x, int y){
double[][] matrix = new double[x][y]; //Erzeugung von Array mit x Spalten und y Zeilen
boolean neustart=false;
Scanner sc = new Scanner(System.in);
do{
neustart=false;
for (int y1=0;y1<=(y-1);y1++){ //gehe Zeilen durch
System.out.println("Geben sie die Werte der Zeile "+(y1+1)+" mit Leerzeichen getrennt ein.(a b c)");
for(int x1=0;x1<=(x-1);x1++){ //gehe Spalten durch
try {
matrix[x1][y1]=sc.nextDouble(); //trage Werte ein
}
catch(Exception E){
System.out.println("Ungueltige Eingabe");
neustart=true;
sc.next();
y1=y+1;
break;
}
}
}
}
while(neustart==true);
return matrix;
}
public static void matrixAusgabe(double[][] matrixAusgabe,int x, int y){
int x1,y1;
for (y1=0; y1<=(y-1); y1++){ //i für die Zeilen, j für die Spalten
System.out.println();
for (x1=0; x1<=(x-1); x1++){
System.out.print(matrixAusgabe[x1][y1] + " ");
}
}
}
public static boolean symmetrieCheck(double[][] matrixSym, int x, int y){
int x1=0,y1=0;
if (x==y){
for (y1=0; y1<=(y-1); y1++){
for (x1=0;x1<=(x-1);x1++){
if (matrixSym[x1][y1]!=matrixSym[y1][x1]) {
return false; }
}
}
return true;
}
return false;
}
public static double[][] transpo(double[][] matrixTrans,int x, int y){
int x1=0,y1=0;
double[][] matrixTransNew = new double[y][x];
for (y1=0; y1<=(y-1); y1++){
for (x1=0;x1<=(x-1);x1++){
matrixTransNew[y1][x1]=matrixTrans[x1][y1];
}
}
return matrixTransNew;
}
public static double sattelpunkt(double[][] matrixSat, int x, int y){