Studientage

Dr Franke Ghostwriter
ich konnte leider nicht an den Studientagen teilnehmen und wollte daher mal hören, was ihr so zu berichten habt von dort? Wie ist es gewesen, was wurde gemacht?

Schöne Grüße
Ela
 
Also ich kann nur von Samstag und Sonntag sprechen:

Samstag:
- bisserl Orga und Vorstellungsrunde und Herr Krämer war vor Ort
- die Kurseinheiten und die wichtigen Themen wurden nochmal erläutert und mit kleinen Zwischenaufgaben näher gebracht (Theoriefragen was Klassen, Objekte, Exemplar, Attribut etc., Rekursion, Klassengraph zeichnen (UML), Exceptions, Sichtbarkeiten)
- es wurde nocheinmal auf die zusätzlichen PDF's unter den Ergänzenden Materialien hingewiesen zu den Exceptions, Sichtbarkeiten sowie super/this mit den entsprechenden kleinen Aufgaben darin
- als letztes wurde die Klausur 2008 durchgearbeitet und komplett gelöst
- damit lies sich denn der Tag schon komplett füllen

Sonntag:
- es wurde die Aufgabe zu den Binominalkoeffizienten in Gruppen bearbeitet und anschließend besprochen (alle Methoden der Berechnung, Rekursive Definition, Iterativ und verbesserter Algorithmus (Pseudocode)
Die Aufgabe mit dem Pascaldreieck wurde ebenfalls noch bearbeitet
- zusätzlich ist die Aufgabe Ringpuffer einmal gemeinsam programmiert wurden

Aufgabe 2 und 3 gelten als eher direkte Klausurvorbereitung

Aufgabe 1 sollte man am besten vergessen (außer wer nun wirklich viel Lust auf Mathematik und gehobene Programmierung hat [also der Gegenteil eines Einstiegskurs])

Aufgabe 4 sollte auch durchführbar sein noch
Aufgabe 5 aus der Klausur 2007 ist ebenfalls als Klausurvorbereitung empfohlen

Die letzten beiden Aufgaben wurden aber nicht besprochen.

Generell ist die Kursbetreuung der Ansicht die Klausur 2007 und 2008 wären zu leicht und will entsprechend die Schwierigkeitsgrad anziehen.
Bei Rekursion ist mit mathematischen Formeln und deren Umsetzung zu rechnen wie Aufgabe 2 der Übungsaufgaben.

Es muss bei der Programmierung auf Papier ebenfalls kommentiert werden.

Generell ist bei den Übungsaufgaben deutlich geworden, dass der Zeitaufwand für Programmierbeginner und Java - Erstlinge (wie wohl fast alle in diesem Kurs) doch deutlich höher ist als von der Kursbetreuung angenommen. (Zumal sich bei einigen Aufgaben noch Verständnisprobleme wie z.B. bei Binominalkoffizienten einschleichen (wohl dem der Algo. Mathe schon hatte und sogar auch verstanden hat).

Alle auf den Studientagen entwickelten Tafelbilder sowie Programmierlösung werden uns zur Verfügung gestellt.
 
Super, danke für den Bericht. Leider etwas demotivierend, dass die Kursbetreuung den Schwierigkeitsgrad so anheben will. Denn auch ich zähle zu den Programmierbeginnern und von daher bin ich noch nicht so ganz sicher, ob ich überhaupt eine Chance habe bei der Klausur. Algo-Mathe hab ich natürlich noch nicht hinter mir, wäre dann vielleicht schlauer gewesen, das anders herum zu belegen...

Na ja, sind ja noch 3 1/2 Wochen 🙂

Ela
 
ich wollte mich mal eben zu einer Aussage äußern:

Generell ist die Kursbetreuung der Ansicht die Klausur 2007 und 2008 wären zu leicht und will entsprechend die Schwierigkeitsgrad anziehen.
Bei Rekursion ist mit mathematischen Formeln und deren Umsetzung zu rechnen wie Aufgabe 2 der Übungsaufgaben.

Also beim Schwierigkeitsgrad habe ich mich auf einzelne Aufgaben bezogen und eine Methode, die den Durchschnitt eines int-Arrays berechnet ist einfach in der Klausur keine 10 Punkte wert. Dafür finde ich die Matrixaufgabe aus 2007 zB nicht angemessen sondern eher zu schwer. Zudem muss man sagen, dass die EA damals ganz andere waren und es in dem zugehörigen Semester keine Betreuung gab. Der Schwierigkeitsgrad hat sich in den letzten Klausuren schon angehoben und ist in etwa gleich geblieben auch wenn die EA sich dieses Jahr geändert haben. Prinzipiell erwarte ich, dass jemand der den Kurs bearbeitet hat, das Grundhandwerk gelernt hat. Ein Java-Experte muss man sicherlich nicht sein. Also unnötige Panik ist vollkommen fehl am Platz. Ich will aber nicht den Eindruck erwecken, dass man in diesem Kurs irgendwie etwas geschenkt bekommt und habe deswegen darauf hingewiesen wo ich die Punkte in einer Klausur anders verteilen würde, so dass man dies bei der Klausurvorbereitung berücksichtigen kann, denn dafür ist das Wissen zu grundlegend. Kenntnisse aus der algorithmischen Mathematik sind glaube ich auch nicht notwendig, denn ein Summenzeichen u.ä. sind nicht so schwer und reine Gewöhnungssache.

Man sollte also immer das Gesamtbild sehen und das Ziel ist es ein solides Grundwissen aufzubauen und nicht Klausuren zu bestehen.

Viele Grüße,
Silvia
 
Ich habe den Passus von Schneevater gerade auch nochmal gelesen, und muß sagen, so kommt er tatsächlich etwas abschreckend rüber😉.

Ich habe es vielmehr am Wochenende so aufgefasst, daß man versuchen wird, tatsächlich die Punktvergabe noch näher an der Schwierigkeit bzw. dem Aufwand zu orientieren. Und diesen Punkt habe ich zumindest, positiv zur Kenntnis genommen.

Gruß

Uwe
 
Man sollte also immer das Gesamtbild sehen und das Ziel ist es ein solides Grundwissen aufzubauen und nicht Klausuren zu bestehen.

Man lernt fürs Leben das ist klar, aber die Klausur will man trotzdem bestehen 😉


Mit der Punkteverteilung stimmt allerdings, wobei ich es am Studientag nicht nur auf die Punkteverteilung bezogen hatte die Aussage denn habe ich dieses wohl fehl interpretiert.

40 Punkte für diese Aufgabe ist allerdings wirklich etwas unglücklich als Gesamtheit, wenn man diese schon nicht behandeln kann wärs schon fast vorbei.
 
Also Zugsimulation habe ich ein wenig gemacht... aber die ist ja ziemlich frei.

Meine Lösung kann bisher keine Waggons in der Reihenfolge ändern. sowie hat nur eine Lok, das hatte ich zu spät gelesen das ich mindestens eine Lok haben kann...

Hier mal meine Klassen
Zug:
Code:
/**
 * Beschreiben Sie hier die Klasse Zug.
 * 
 * @author (Ihr Name) 
 * @version (eine Versionsnummer oder ein Datum)
 */
public class Zug
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    //lok ist anfang
    //ende ist ende des Zugs
    
    //ein Zug ist wie eine Liste mit einem Anfang und einem Ende
    //der Anfang ist hierbei die Zuglok, das Ende der letzt eingefügte Waggon
    private Waggon lok;
    private Waggon ende;
    
    private int WaggonAnzahl = 0;

    /**
     * Konstruktor für Objekte der Klasse Zug
     */
    public Zug(int lokSpeed)
    {
        // Instanzvariable initialisieren
        lok = new Waggon(lokSpeed);
        ende = lok;
        WaggonAnzahl = 1;
    }
    

    public void fuegePersonenWaggonHinzu(int maxSpeed, int stehAnzahl, int sitzAnzahl)
    {
        if (WaggonAnzahl == 1 ) {
            PersonenWaggon neu = new PersonenWaggon(maxSpeed, stehAnzahl, sitzAnzahl);
            lok.setNext(neu);
            neu.setPrev(lok);
            ende = neu;
            WaggonAnzahl++;
        }
        else {           
            PersonenWaggon neu = new PersonenWaggon(maxSpeed, stehAnzahl, sitzAnzahl);
            neu.setPrev(ende);
            ende.setNext(neu);
            ende = neu;
            WaggonAnzahl++;
        }
    }
    
    
    public void fuegeGueterWaggonHinzu(int maxSpeed, int maxLadegew, int maxVol)
    {
        if (WaggonAnzahl == 1 ) {
            GueterWaggon neu = new GueterWaggon(maxSpeed, maxLadegew, maxVol);
            lok.setNext(neu);
            neu.setPrev(lok);
            ende = neu;
            WaggonAnzahl++;
        }
        else {           
            GueterWaggon neu = new GueterWaggon(maxSpeed, maxLadegew, maxVol);
            neu.setPrev(ende);
            ende.setNext(neu);
            ende = neu;
            WaggonAnzahl++;
        }

    }
    
    public PersonenWaggon suchePersWaggonsNachAttributen(int maxSpeed, int stehAnzahl, int sitzAnzahl) {
        PersonenWaggon ergPers = null;
        Waggon n = null;
        
        if (WaggonAnzahl == 0) {
            return ergPers;
        }
        n = lok.getNext();
        while (n != null) {
          if (n.getObjName() == "PersonenWaggon") {           
            PersonenWaggon c = (PersonenWaggon) n;
            if (c.getSitzplaetze() == sitzAnzahl && c.getStehplaetze() == stehAnzahl && c.getMaxSpeed() == maxSpeed) {
                return c;
            }
            
          }
          n = n.getNext();
        }
        
        return ergPers;
    }


    public PersonenWaggon suchePersWaggonsNachNummer(int nummer) {
        PersonenWaggon ergPers = null;
        Waggon n = null;
        
        if (WaggonAnzahl == 0) {
            return ergPers;
        }
        n = lok.getNext();
        while (n != null) {
          if (n.getObjName() == "PersonenWaggon") {           
            PersonenWaggon c = (PersonenWaggon) n;
            if (c.getNummerPersWaggon() == nummer) {
                return c;
            }
            
          }
          n = n.getNext();
        }        
        return ergPers;
    }

    
    public int berechneMaxZugSpeed(){
        int minSpeed = 0;
        int aktSpeed = 0;
        Waggon n;
        if (WaggonAnzahl == 0) {
            return 0;
        }
        minSpeed = lok.getMaxSpeed();
        n = lok.getNext();
        while ( n != null) {
            aktSpeed = n.getMaxSpeed();
            if (minSpeed > aktSpeed) {
                minSpeed = aktSpeed;
            }
            n = n.getNext();
        }
        return minSpeed;
        
    }

    public boolean pruefeErreichbarkeitPers(int nummer1, int nummer2) {
        PersonenWaggon w1 = (PersonenWaggon) suchePersWaggonsNachNummer(nummer1);
        PersonenWaggon w2 = (PersonenWaggon) suchePersWaggonsNachNummer(nummer2);
        PersonenWaggon sWaggon = w1;
        PersonenWaggon sWaggon1 = w1;


        //falls die beiden nummern nicht existieren -> false
        if (w1 == null || w2 == null) {
            return false;
        }
        
        //schaue ob es vorwärts die entsprechende Waggon Nummer gibt
        if (sWaggon.getNext() != null && sWaggon.getNext().getObjName() == "PersonenWaggon") {
            sWaggon = (PersonenWaggon) sWaggon.getNext();
            while ( sWaggon != null) {
                if ( sWaggon.getNummerPersWaggon() == nummer2) {
                    return true;
                }
                sWaggon = (PersonenWaggon) sWaggon.getNext();
            }
        }

        //schaue ob es rückwärts die entsprechende Waggon Nummer gibt
        if (sWaggon1.getPrev() != null && sWaggon1.getPrev().getObjName() == "PersonenWaggon") {
            sWaggon1 = (PersonenWaggon) sWaggon1.getPrev();
            while ( sWaggon1 != null) {
                if ( sWaggon1.getNummerPersWaggon() == nummer2) {
                    return true;
                }
                sWaggon1 = (PersonenWaggon) sWaggon1.getPrev();
            }
        }

       //wenn nichts gefunden false
       return false;
        
        
    }
    
    
}

Klasse Waggon:
Code:
/**
 * Klasse Waggon - beschreiben Sie hier die Klasse
 * 
 * @author (Ihr Name)
 * @version (eine Version-Nummer oder ein Datum)
 */
public class Waggon
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private int hoechstGeschwindigkeit;
    private Waggon next;
    private Waggon prev;
    public final String objName = "Waggon";
    
    //Konstruktor
    public Waggon(int maxGeschw){
        hoechstGeschwindigkeit = maxGeschw;
        next = null;
        prev = null;
    }
    
    //gebe next zurueck 
    public Waggon getNext() {
        return next;
    }
    
    
    public Waggon getPrev() {
        return prev;
    }
    
    //gebe Hoechstgeschwindigkeit zurueck
    public int getMaxSpeed() {
        return hoechstGeschwindigkeit;
    }
   
    //setz Methode fuer next
    public void setNext(Waggon n) {
        next = n;
    }
   
    //setz Methode fuer prev
    public void setPrev(Waggon p) {
        prev = p;
    }
    
    public String getObjName() {
        return objName;
    }
}

Klasse PersonenWaggon:
Code:
/**
 * Beschreiben Sie hier die Klasse PersonenWaggon.
 * 
 * @author (Ihr Name) 
 * @version (eine Versionsnummer oder ein Datum)
 */
public class PersonenWaggon extends Waggon
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private int stehplaetze;
    private int sitzplaetze;
    private final String objName = "PersonenWaggon";
    private int nummerPersWaggon;
    public static int anzahlPersWaggon;

    /**
     * Konstruktor für Objekte der Klasse PersonenWaggon
     */
    public PersonenWaggon(int maxSpeed, int stehAnzahl,int sitzAnzahl)
    {
        // Instanzvariable initialisieren
        super(maxSpeed);
        anzahlPersWaggon++;
        nummerPersWaggon = anzahlPersWaggon;
        stehplaetze = stehAnzahl;
        sitzplaetze = sitzAnzahl;        
    }
    
    public int getStehplaetze(){
        return stehplaetze;
    }
    
    public int getSitzplaetze(){
        return sitzplaetze;
    }
    
    public String getObjName() {
        return objName;
    }
    public int getNummerPersWaggon(){
        return nummerPersWaggon;
    }
}

Klasse GueterWaggon
Code:
/**
 * Beschreiben Sie hier die Klasse GueterWaggon.
 * 
 * @author (Ihr Name) 
 * @version (eine Versionsnummer oder ein Datum)
 */
public class GueterWaggon extends Waggon
{

    private int maxLadegewicht;
    private int maxVolumen;
    private final String objName = "GueterWaggon";
    private int nummerGueterWaggon;
    public static int anzahlGueterWaggon;

    /**
     * Konstruktor für Objekte der Klasse GueterWaggon
     */
    public GueterWaggon(int maxSpeed, int maxGew, int maxVol)
    {
        super(maxSpeed);
        anzahlGueterWaggon++;
        nummerGueterWaggon = anzahlGueterWaggon;        
        maxLadegewicht = maxGew;
        maxVolumen = maxVol;
    }
    
    public String getObjName() {
        return objName;
    }

}

Zudem soll überprüft werden können, ob man von
einem bestimmten Personenwaggon zu einem gegebenen anderen gelangen
kann.

Da ich nicht ganz wusste in dem Fall wie der bestimmte Waggon nun ist habe ich hatte ich mir zuerst den Fall gesucht eine PersonenWaggon zu finden anhand seiner Attribute (siehe suchePersWaggonsNachAttributen),
danach hatte ich mir überlegt es wäre ja besser die PersonenWaggons hätten Nummern da es ja auch sonst Personen Waggons mit gleichen Attributen geben könnte.
Daher verwende ich nun bei pruefeErreichbarkeitPers die suchMethode für die Nummer und übergebe auch nur die Nummern.

Kann man aufjedenfall viel rumbasteln mit der Aufgabe
 
Oben