Hilfe!!...bin einfach nur verzweifelt :(

  • Hallo.....ich muss bis mittwoch mein eprog beispiel haben und ich versteh es einfach..nicht! ich hab schon überall im internet gesucht hab zwat sAchen gefunden die mir aber nicht weiterhelfen!!.....
    ich zeig euch hier meine aufgabenstellung und dann mein schon gemachtes....
    vielleicht ist wer so nett und schreibt mir was ich falsch hab bzw was ich noch dazufügen muss!!
    danke im Voraus
    lg christophe


    Aufgabenstellung:
    Ihr Programm soll zuerst eine Zahl n einlesen, die die Dimension der quadratischen Matrizen angibt. Anschließend sollen die Elemente zweier n*n-Matrizen eingelesen werden; die beiden Matrizen werden multipliziert und das Produkt (wieder eine n*n-Matrix) wird ausgegeben.
    Für die Multiplikation von Matrizen gilt folgende Formel:


    Eingabedaten:
    Lesen Sie zuerst die Dimension der Matrizen ein; diese muß > 0 und < 8 sein.
    Danach werden die Elemente der Matrizen eingelesen, und zwar in der Reihenfolge a11, a12, ... , a1n, a21, ... , a2n, ... , ann, b11, b12, ... , b1n, b21, ... , b2n, ... , bnn.
    Die einzelnen Elemente der Matrizen sind vom Typ INTEGER.

    Ausgabedaten:
    Bei korrekten Eingabedaten geben Sie die Elemente der Ergebnismatrix zeilenweise aus, wobei Sie zwei Elemente jeweils durch ein Leerzeichen trennen.
    Geben Sie nach jeder Zeile der Matrix einen Zeilenvorschub aus.
    Fehlerbehandlung:
    Sämtliche Eingabedatensätze sind immer vollständig einzulesen. Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.
    Enthält der Eingabedatensatz einen ungültigen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.

    Sind die Datentypen bei allen Eingaben richtig, die eingegebenen Daten aber inhaltlich nicht korrekt oder erfüllen nicht die Bedingungen (z.B. Dimension>7), so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.


    hier das was ich schon gemacht hab!!

    import eprog.*;

    public class Matmult extends EprogIO{


    public static void main(String []args){


    int n = 0;
    int [][] matrix = new int [n][n];
    boolean Dimensionsfehler = false;


    try{
    n = readInt();
    }

    catch(EprogException e){println("?");

    }

    if((n < 0)||(n > 8)) Dimensionsfehler = true;
    if(Dimensionsfehler == true) println("Falsche Eingabe");


    for (int i=0; i < n; i++){
    for (int k=0; k < n; k++){


    try{

    matrix[i][k]= readInt();

    }


    catch(EprogException e){println("?");

    }

    }
    }


    println("\n");


    println("");


    }
    }

  • hier mal ein grober vorschlag in pseudocode:

  • hallo...danke für deine mühe!

    aber ich schaff das einfach noch immer nicht....
    dass du das mit methoden gemacht hast ist ja klar weils dann übersictlicher ist und du für beide matritzen nicht zweimal das gleiche schreiben musst!...
    im main block steht

    int dimension = int einlesen
    wenn ich das in java schreib gehört statt einlesen aber readInt() oder?

    .........???...wie soll ich das nur schaffen......war voller motivation als ich gesehn hab dass ich die beispiele in den tutorien immer verstanden hab und dann sowas...hab nicht einmal vom leichtenbeispiel eine ahnung

  • ja, int einlesen bedeuted readInt()
    die von eprog zur verfügung gestellten klassen kenne ich leider nicht (ich hab eprog noch in modula gemacht)

    aber als tipp: mach immer so weinge schritte wie möglich - fang z.b. mal nur mit integer einlesen an und gib die eingelesene zahl dann aus
    z.b.

    Code
    ...
    ..main(..)
    {
      int dim = readInt();
      System.out.println("dim ist jetzt: "+dim);
    }



    und das erweiterst du dann schritt für schritt, gibst immer wieder zwischenergebnisse aus. so siehst du immer sofort, wo ein eventueller fehler liegt bzw. was dein zusätzlicher code bewirkt

  • hallo!

    sodala bin jetzt soweit, dass ich beide matritzen einlesen kann.......

    nur wie kann ich beide multiplizieren und dann die neue am bildschrirm ausgeben!

    hier mein code:

    import eprog.*;

    public class test extends EprogIO{


    public static void main(String []args){


    int n = 0;
    boolean Dimensionsfehler = false;

    try{n = readInt();
    }

    catch(EprogException e){println("?");

    }

    if((n < 0)||(n > 8)) Dimensionsfehler = true;
    if(Dimensionsfehler == true) println("Falsche Eingabe");


    int i=0,j=0;
    int matrix_a[][] = new int[n][n];
    int matrix_b[][] = new int[n][n];
    int matrix_c[][] = new int[n][n];


    //matrizen füllen
    for( i=0; i < n ; i++){
    for( j=0; j < n ; j++){
    println("a"+i+j+": ");
    try{matrix_a[j][j] = readInt();}
    catch(EprogException e){println("Fehler: keine Zahl!");}
    }
    }
    for( i=0; i < n ; i++){
    for( j=0; j < n ; j++){
    println("b"+i+j+": ");
    try{matrix_b[i][j] = readInt();}
    catch(EprogException e){println("Fehler: keine Zahl!");}
    }

    }

    //matrix_c berechnen


    }
    }


    liebe grüße christophe

  • Zitat von thongsong

    Ist hier vielleicht unpassend, aber ich habe da mal trotzdem eine Frage. Wo bekomme ich eine Kurzreferenz zu Pseudocode. Oder kann mir jemand eine didaktisch wertvolle Literatur zu diesem Thema vorschlagen?:confused:

    Es gibt meines wissens nach keine spezifizierung, wie pseudocode auszusehen hat. Wenn es so etwas geben würde, währe das 'pseudo' ja nicht mehr zutreffend.

    Die einizge Vorraussetzung ist, das der leser versteht was du meinst.

    Also z.b:

    Code
    von i=1 bis 10:
      //gib i aus
    Code
    i=1 ... 10
     print i
    Code
    for (int i=1; i<=10;i++){
     //spuck aus das i
    }


    ist alles gültiger pseudocode

  • Zitat von @lig8or

    sodala bin jetzt soweit, dass ich beide matritzen einlesen kann.......

    "FALSCHE EINGABE" sollte in Blockschrift geschrieben sein, und andere Fehlermeldungstexte sind nicht vorgesehen. Solche Dinge bringen regelmäßig Punkteabzug. Außerdem solltest du schauen, dass das Programm sich auch bei Falscheingaben strikt so verhält, wie es die Angabe vorsieht (alles einlesen, aber nichts berechnen).

    Zitat von @lig8or

    nur wie kann ich beide multiplizieren und dann die neue am bildschrirm ausgeben!

    Einfachste Möglichkeit: Drei verschachtelte Schleifen mit

    Code
    c[i][j] = c[i][j] + (a[i][k] * b[k][j]);

    als innerstem Statement.

    EDIT: Noch einfachere, zwar nicht sehr schöne, aber korrekte Methode:

    Code
    if (n == 1) {
     	c[1][1] = a[1][1] * b[1][1];
     }
     if (n == 2) {
     	c[1][1] = ...
     	c[1][2] = ...
     	c[2][1] = ...
     	c[2][2] = ...
     }
     ...


    Das wird allerdings ziemlich lang und mühsam, ist quasi ein letzter Ausweg.

    Gabriel

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!