Author Topic: Beispiele aus Übungen und Praktika  (Read 10076 times)

tiefenbass

  • Hero Member
  • *****
  • Posts: 1876
  • Karma: +0/-0
    • View Profile
    • http://www.fjp-media.de
Beispiele aus Übungen und Praktika
« Reply #15 on: April 16, 2009, 06:37:00 pm »
~up~
[align=center]Füllhöhe des Textes technisch bedingt!

----------------------------------------
Matthias Zagermann
Jünger der polyphonen PVC/PVAc-Scheiben

[/align]
 
Quote
Jede Entscheidung ist der Tod von Milliarden von Möglichkeiten

essenfeger

  • Jr. Member
  • **
  • Posts: 77
  • Karma: +0/-0
    • View Profile
Beispiele aus Übungen und Praktika
« Reply #16 on: April 17, 2009, 02:31:29 pm »
Quote from: mArKuZZZ
ich hätte mal ne gerelle frage zum informatik praktikum programmieren. ist die abgabe der bearbeiteten aufgaben in irgendeiner weise verpflichtend und voraussetzung für die zulassung zur prüfung?
wenn ja, müssen wir unsere lösungen vor irg einem gremium verteidigen / erklären?

offtopic aber:
* Jein.
CIWler müssen abgeben um die Prüfungsvoraussetzung zu haben.
MBler, WWler, VTler und CIWler müssen abgeben weil die Statistik gegen ein bestehen ohne Punkte aus dem Praktikum spricht.

* Nein.
armselig != arm x selig

Ich hab schon Kugeln umkippen sehen. Mitten im kartesischen Raum.

tiefenbass

  • Hero Member
  • *****
  • Posts: 1876
  • Karma: +0/-0
    • View Profile
    • http://www.fjp-media.de
Beispiele aus Übungen und Praktika
« Reply #17 on: May 01, 2009, 01:11:43 am »
Hier die Listings aus dem Praktikum vom 30.04.2009:

Die Klasse Antwort:
Code: [Select]

package de.tudresden.praktikum2009.lib;

/* Diese Klasse stellt das Modell für eine einzelne Antwort. Sie enthält
 * den Text und den Wahrheitsgehalt. Beide Werte sollen nach Erstellen
 * eines Objektes nur noch ausgelesen werden können.*/

public class Antwort {

private String antworttext;

private boolean richtig;

// Konstruktor, für Initialisierung der Daten
public Antwort(String antworttext, boolean richtigeAntwort) {
this.antworttext = antworttext;
this.richtig = richtigeAntwort;
}

public String getAntworttext() {
return antworttext;
}

/*
* abweichend hier:bei boolschen Werten fängt der Standard-Getter mit is
* statt mit get an
*/
public boolean isRichtig() {
return richtig;
}

/*
* eine Version des Getters, welcher vor Rückgabe eine Modifizierung von
* Daten, hier der Typ und Wert, vornimmt
*/
public String getRichtig() {
if (this.richtig) {
return "wahr";
} else {
return "falsch";
}
}
}


Die Klasse Frage:
Code: [Select]

package de.tudresden.praktikum2009.lib;

import java.util.ArrayList;

/* Eine Frage soll eindeutig identifizierbar sein,
 * den Frage-Text beinhalten und kann mehrere
 * Antwortmöglichkeiten haben. Und auch hier sollten
 * die Attribute eines Objektes nur ausgelesen werden
 * können*/
public class Frage {
private String id;

private String frage;

/* ArrayList -> siehe Collection-Framework */
private ArrayList antworten;

public Frage(String identifikator, String frage,
ArrayList antworten) {
id = identifikator;
this.frage = frage;
this.antworten = antworten;
}

public String getId() {
return id;
}

public String getFrage() {
return frage;
}

public ArrayList getAntworten() {
return antworten;
}
}


Die Klasse Fragenkatalog
Code: [Select]

package de.tudresden.praktikum2009.lib;

import java.util.ArrayList;

/* Der Fragenkatalog enthält eine Menge von Fragen und hat
 * auch eine Bezeichnung */
public class Fragenkatalog {
private ArrayList fragen;

private String name;


/* es ist möglich, gleichnamige Konstruktoren (und
* auch Methoden) mit voneinander verschiedenen
* Signaturen zu definieren */
public Fragenkatalog(String name) {
this.name = name;
this.fragen = new ArrayList();
}

public Fragenkatalog(String name,
ArrayList existierendeFragen) {
this.name = name;
this.fragen = existierendeFragen;
}

/* fügt eine neue(?) Frage dem Katalog hinzu*/
public void addFrage(Frage frage) {
this.fragen.add(frage);
}

/* entfernt eine Frage mit entsprechender id aus
* dem Katalog*/
public boolean delFrage(String id) {
for (int i = 0; i < this.fragen.size(); i++) {
if (this.fragen.get(i).getId().equals(id)) {
this.fragen.remove(i);
return true;
}
}
return false;
}

public ArrayList getFragen() {
return fragen;
}

public void setFragen(ArrayList fragen) {
this.fragen = fragen;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}


und nun ein paar Tests:

Test der Klasse Antwort
Code: [Select]
package de.tudresden.praktikum2009;

import java.util.ArrayList;
import de.tudresden.praktikum2009.lib.Antwort;

public class TestAntwort {

/**
* @param args
*/
public static void main(String[] args) {
// 5 Objekte vom Typ Antwort erstellt
Antwort aw1 = new Antwort("ein grüner Kreis.", true);
Antwort aw2 = new Antwort("ein grünes Dreieck.", false);
Antwort aw3 = new Antwort("ein grüne Figur.", true);
Antwort aw4 = new Antwort("ein grünes Pfeil.", true);
Antwort aw5 = new Antwort("ein blauer Kreis.", false);

// die Objekte zu einer Liste zusammenführen
ArrayList antwortmoeglichkeiten = new ArrayList();
antwortmoeglichkeiten.add(aw1);
antwortmoeglichkeiten.add(aw2);
antwortmoeglichkeiten.add(aw3);
antwortmoeglichkeiten.add(aw4);
antwortmoeglichkeiten.add(aw5);

//ein einzelnes Antwort-Objekt auslesen
System.out.println(aw3.getAntworttext());
System.out.println("Diese Antwort ist " + aw3.isRichtig() + ".");

// udn jetzt mit einem zufälligen Antwort-Objekt
int n = (int) (Math.random() * antwortmoeglichkeiten.size());
System.out.println("Zufallszahl: " + n);
System.out.println("jetzt ein zufälliges Antwortobjekt aus der Liste:");
System.out.println(antwortmoeglichkeiten.get(n).getAntworttext());
System.out.println("Diese Antwort ist "
+ antwortmoeglichkeiten.get(n).isRichtig() + ".");
}

}


test der Klasse Frage
Code: [Select]

package de.tudresden.praktikum2009;

import java.util.ArrayList;

import de.tudresden.praktikum2009.lib.Antwort;
import de.tudresden.praktikum2009.lib.Frage;

public class TestFrage {

// eine kleine Testumgebung
public static void main(String[] args) {

Antwort aw1 = new Antwort("ein grüner Kreis.", true);
Antwort aw2 = new Antwort("ein grünes Dreieck.", false);
Antwort aw3 = new Antwort("ein grüne Figur.", true);
Antwort aw4 = new Antwort("ein grünes Pfeil.", true);
Antwort aw5 = new Antwort("ein blauer Kreis.", false);

ArrayList antwortmoeglichkeiten = new ArrayList();
antwortmoeglichkeiten.add(aw1);
antwortmoeglichkeiten.add(aw2);
antwortmoeglichkeiten.add(aw3);
antwortmoeglichkeiten.add(aw4);
antwortmoeglichkeiten.add(aw5);

//wir erzeugen uns 3 Objekte vom Typ "Frage"
Frage f1 = new Frage("A001", // eine (eindeutige) ID
"Was sind gängige Ampelsignale für das fahren/gehen?", // die Frage
antwortmoeglichkeiten); // die Antwortmöglichkeiten
Frage f2 = new Frage("A002",
"blablabla...", antwortmoeglichkeiten);
Frage f3 = new Frage("65003",
"blubb", antwortmoeglichkeiten);


System.out.println(f1.getId());
System.out.println(f1.getFrage());
System.out.println(f1.getAntworten());

System.out.println(f3.getId());
System.out.println(f3.getFrage());
System.out.println(f3.getAntworten());
}
}


und nun ein ganz kleines Quiz mit 2 Fragen:
Code: [Select]
package de.tudresden.praktikum2009;

import java.util.ArrayList;
import java.util.Scanner;
import de.tudresden.praktikum2009.lib.*;


// hier für 1 richtige Antwortmöglichkeit
public class Quizshow {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

// Code wurde in eine Methode ausgelagert
Fragenkatalog fk = initFK();

// jetzt wird eine Frage aus allen möglichen ausgewählt
int n = (int) (Math.random() * fk.getFragen().size());

// Frage und Antwortmöglichkeiten auf Konsole ausgeben
System.out.println("Beantworte bitte folgende Frage:");
System.out.println(fk.getFragen().get(n).getFrage());

/*
* besser als direkte Ausgabe der einzelnen Antworten, da man die anzahl
* der möglichen Antworten als unbekannt voraussetzen sollte
*/
for (int i = 0; i < fk.getFragen().get(n).getAntworten().size(); i++) {
System.out.println((i + 1)
+ " - "
+ fk.getFragen().get(n).getAntworten().get(i)
.getAntworttext());
}

// nutzer darf sich entscheiden
int wahl = sc.nextInt();

/*
* Gültigkeit der Auswahl abprüfen (Schutz vor zu große/zu kleine
* Zahlen)
*/
if ((wahl) > 0 && wahl <= fk.getFragen().get(n).getAntworten().size()) {
System.out.println("diese Antwort ist "
+ fk.getFragen().get(n).getAntworten().get(wahl - 1)
.getRichtig());
} else {
System.out
.println("deine Auswahl lag ausserhalb der Antwortmöglichkeit");
}

}

// erstellt einen Fragekatalog und füttert ihn mit 2 Fragen
private static Fragenkatalog initFK() {

Fragenkatalog fk = new Fragenkatalog("lustigerName");

ArrayList antworten = new ArrayList();

Antwort a1 = new Antwort("5", false);
antworten.add(a1);

antworten.add(new Antwort("7", true));
antworten.add(new Antwort("8", false));

Frage frage = new Frage("A", "Wieviel Tage hat eine Woche?", antworten);

fk.addFrage(frage);

/*
* Neu-Initialisierung des Objektes -> es sind ab hier wieder 0 Elemente
* enthalten ("Variablen-Recycling")
*/
antworten = new ArrayList();
antworten.add(new Antwort("H2O", true));
antworten.add(new Antwort("H2O2", false));
antworten.add(new Antwort("HO2", false));

frage = new Frage("B", "Was ist die chemische Formel von Wasser",
antworten);

fk.addFrage(frage);

return fk;
}
}



Ihr könnt euch ja über folgende Sachen mal Gedanken machen:
[LIST=1]
  • wie kann man in der Klasse Fragenkatalog absichern, dass in einem Fragenkatalog-Objekt jede id nur einmal vorkommt (id = Primärschlüssel)?
  • wie sieht der Sourcecode für ein Quiz aus, in dem pro Frage mehrere richtige Antworten möglich sind?
  • welche persistente Datenquellen wären als Quelle zum Füllen des Fragenkataloges denkbar?


Viel Spass,

Matthias
[align=center]Füllhöhe des Textes technisch bedingt!

----------------------------------------
Matthias Zagermann
Jünger der polyphonen PVC/PVAc-Scheiben

[/align]
 
Quote
Jede Entscheidung ist der Tod von Milliarden von Möglichkeiten