Zeige Beiträge 1 bis 8 von 8 Treffern |
|
Thema: Streichelzoo |
|
das endif habe ich nun weggelassen
soweit schon danke
|
|
Thema: Streichelzoo |
|
Haufig wird Vererbung dazu eingesetzt, eine “ist ein”-Beziehung zwischen verschiedenen Klassen ¨
darzustellen. Funktionen, die mit vielen verschiedenen Klassen funktionieren sollen, werden fur eine ¨
abstrakte Basisklasse (Schnittstelle) definiert und anschließend mit Objekten benutzt, deren Klassen
von dieser Basisklasse abgeleitet wurden.
Ziel dieser Aufgabe ist die Darstellung der Vorteile dieser Trennung in Schnittstelle und Implementierung
an einem konkreten Beispiel. Stellen Sie sich einen Zoo vor, in dem es eine Vielzahl
verschiedener Tiere gibt. Fur jedes Tier soll vereinfachend gelten, dass es sich um ein S ¨ augetier, einen ¨
Vogel oder einen Fisch handelt. Desweiteren
• ist es den Besuchern moglich, einen Teil der Tiere zu f ¨ uttern (z.B. Ziegen, G ¨ anse, Goldfische), ¨
andere nicht (Pinguine, Baren, Haie). ¨
• ist es den Besuchern moglich, einen Teil der S ¨ augetiere zu streicheln (Ziegen), andere nicht ¨
(Baren). V ¨ ogel und Fische k ¨ onnen nicht gestreichelt werden. ¨
• machen Saugetiere und V ¨ ogel charakteristische Ger ¨ ausche. Wir nehmen an, dass Fische stets ¨
stumm sind.
• haben alle Tiere (ja, auch die Goldfische!) einen Spitznamen, der ihnen im Konstruktor uberge- ¨
ben wird.
Implementieren Sie eine Klassenhierarchie, so dass es moglich ist, die Funktionen ¨
• void fuettern ( Tier& tier )
• void streicheln ( Saeugetier& saeugetier )
• void geraeusch ( Saeugetier& saeugetier )
• void geraeusch ( Vogel& vogel )zu nutzen. Legen Sie außerdem mindestens zehn verschiedene Tierarten an, davon mindestens
zwei aus jeder der drei Kategorien. Ein Aufruf der oben genannten Funktionen soll das Tier fragen,
ob die gewunschte Operation m ¨ oglich ist, und dann Ausgaben z.B. der folgenden Form erzeugen: ¨
Die Ziege Billy l¨asst sich f¨uttern.
Der B¨ar Bruno m¨ochte nicht gestreichelt werden!
Die Gans Herta schnattert.
Da die Eigenschaften der Tiere fur eine ganze Art gelten und somit von der Instanz unabh ¨ angig ¨
sind (alle Ziegen lassen sich futtern, nicht nur Billy), k ¨ onnen Sie sie mit dem Schl ¨ usselwort “ ¨ static”
als Klassenvariable deklarieren:
static const bool fuetterbar = <Wert>;
Dadurch wird die Variable nicht fur jede Instanz erneut angelegt, außerdem wird deutlich, dass ¨
es sich um eine Eigenschaft handelt, die alle Tiere dieser Art teilen.
Benutzen Sie fur diese Aufgabe abstrakte Basisklassen und rein virtuelle Methoden. Sorgen Sie ¨
dafur, dass die einzelnen Tierarten genau jene Variablen und Methoden erhalten, die sie zum Funk- ¨
tionieren benotigen, z.B. sollte es kein ¨ bool streichelbar fur Fische geben. Geben Sie zus ¨ atzlich ¨
zu Ihrem Programm ein Diagramm ab, in dem Sie die durch die Vererbung gegebene Baumstruktur
darstellen.
^^ das ist die aufgabe die ich erledigen soll
dazu habe ich bisher folgendes:
als eine streichelzoo.h habe ich:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
|
#include <iostream>
#include <cstring>
using namespace std;
// CTier Abstrakte Klasse
class CTier {
public:
CTier() { strcpy(m_name, ""); }
virtual ~CTier() { }
void setName(char *name) { strcpy(m_name, name); }
virtual void vorstellen() { cout << "Hallo, mein Name ist " <<m_name <<endl; }
virtual CTier* create(char *) = 0; // rein Virtuelle Methode
private:
char m_name[50];
};
// CSäugetier
class CSaeugetier : public CTier {
public:
CSaeugetier() { }
virtual ~CSaeugetier() { }
virtual void vorstellen() {
CTier::vorstellen();
cout <<"Ich bin ein Säugetier"<<endl;
}
};
// CFisch
class CFisch : public CTier {
public:
CFisch() { }
virtual ~CFisch() { }
virtual void vorstellen() {
CTier::vorstellen();
cout << "Ich bin ein Fisch" <<endl;
}
};
// CVogel
class CVogel : public CTier {
public:
CVogel(){ }
virtual ~CVogel() { }
virtual void vorstellen() {
CTier::vorstellen();
cout << "Ich bin ein Vogel" <<endl;
}
};
// Tierart - legt eine Klasse an, welche von Vogel, Fisch oder Säugetier abgeleitet ist. Der Konstruktor legt die individuellen Namen fest.
#define TIERART(cname,oberklasse,whoami)
class name : public oberklasse
{
public:
cname(char *name) { CTier::setName(name); }
/* Default-Konstruktor für Kreirrepresäntant */
cname() { }
void vorstellen() {
oberklasse::vorstellen();
cout << "Ich bin " << whoami <<endl;
}
/* Kreirfunktion: Forward Ownership! */
CTier* create(char *name) { return new cname(name); }
};
#endif
|
|
und als streichelzoo.cpp
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
|
#include <stdlib.h>
#include <time.h>
#include "streichelzoo.h"
// Namensvergabe
char *namen[] = { "Mehmet", "Aykut", "Dumbo", "Helga", "Henni",
"KQLY", "SMN", "SF", "Emilio", "Blume" };
const int namZahl = sizeof(namen) / sizeof(*namen);
// Tierarten (Klassen anlegen)
SPEZIES(CZiege, CSaeugetier, "eine Ziege")
SPEZIES(CPinguin, CVogel, "ein Pinguin")
SPEZIES(CGoldfisch, CFisch, "ein Goldfisch")
SPEZIES(CBaer, CSaeugetier, "ein Bär")
SPEZIES(CGans, CVogel, "eine Gans")
SPEZIES(CHai, CFisch, "ein Hai")
SPEZIES(CDachs, CSaeugetier, "ein Dachs")
SPEZIES(CLachs, CFisch, "ein Lachs")
SPEZIES(CAmsel, CVogel, "eine Amsel")
SPEZIES(CElefant, CSaeugetier, "ein Elefant")
// main methode
int main(void) { |
|
wie gehe ich jetz vor um dort mit void etc die tiere jeweils korrekt ausgeben zu lassen das sie eben beispielsweise gefüttert werden wollen aber nicht gestreichelt und dann auch noch die art des geräuschs das sie immer von sich geben - und dabei noch an die aufgabevorgaben da halten
|
|
Thema: Gauss Elimination |
|
a) Gauss-Elimination:
for (k = 0; k < n - 1; k = k + 1)
for (i = k + 1; i < n; i = i + 1)
for (j = k + 1; j < n; j = j + 1)
a[i][j] = a[i][j] - a[i][k] * a[k][j] / a[k][k];
Die Berechnung innerhalb der innersten Schleife ist von den Werten der Schleifenzahler unabh ¨ angig, ¨
d.h. benotigt eine konstante Zeit ¨ tg. Wie ist die algorithmische Komplexitat in Abh ¨ angigkeit von ¨ n?
(2 Punkte)
b) Rekursiver Funktionsaufruf:
int f (int a, int b) {
if (a >= b)
return g(a);
else
return f(a, b - 1) + f(a + 1, b);
};
Uberlegen Sie zuerst, welche Gr ¨ oße als Komplexit ¨ atsparameter sinnvoll ist! Die Zeit, um ¨ g(a) auszurechnen,
soll vom Wert von a unabhangig sein. Wie ist die algorithmische Komplexit ¨ at? (3 Punkte)
Bräuchte bei dieser Aufgabe ein klein wenig Hilfe beim verstehen und Lösungserarbeiten.
Mit einem Komillitonen zusammen kam bei der a) als Lösung irgendwie
O(n log n)
obwohl ich nicht weiss ob das stimmt und wie er darauf kam wurde mir auch nach einigen erklärungen schlichtweg nicht ersichtlich.
und zu der b haben wir als ansatz:
"Da ersichtlich ist das die funktion sich 2 mal selbst aufrufen kann und diese wiederum auch 2 mal aufrufbar ist -> O(2^b)2"
stimmen diese Lösungen so? Wenn ja - warum
bei a zumindest)
|
|
Thema: Hilfe bei CONWAYS GAME OF LIFE |
|
schaffe das heut nichtmehr, zu wenig schlaf und ständig komm ich beim einlesen durcheinander
trotzdem danke für deine mühe und dein hilfsangebot
|
|
Thema: Hilfe bei CONWAYS GAME OF LIFE |
|
würde die aufgabe mich nicht überfordern und wäre diese woche nicht einiges richtig mieß gelaufen würde ich nicht fragen - danke für die moralpredigt aber es ist nunmal eben so gekommen wie es jetzt ist
edit: jetz hat er nurnoch ein problem mit dem "abs" not declared in this scope
ebenso wie main.cpp:115:19: error: cannot declare variable 'rules' to be of abstract type 'GameOfLifeRules'
GameOfLifeRules rules(bc);
|
|
Thema: Hilfe bei CONWAYS GAME OF LIFE |
|
Meine Frage:
aufgabe
http://fs1.directupload.net/images/150108/3qo86d3j.png das ist die Aufgabe
http://pastebin.com/mBXCJNWE
http://pastebin.com/vKFEgqQg
das sind die 2 anhänge mit denen gearbeitet werden soll
Meine Ideen:
#include<fstream>
#include<iostream>
#include<unistd.h>
#include"twodboolarray.hh"
// Basisklassen
class Regel
{
public:
typedef TwoDBoolArray Daten;
virtual void anwenden(Daten& daten) = 0;
};
class BoundaryCondition
{
public:
typedef TwoDBoolArray Daten;
virtual bool boundary(Daten& daten, int i, int j) = 0;
};
class TorusCondition : public BoundaryCondition
{
// Implementieren Sie hier eine Randbedingung, welche das
// Gebiet als doppelt periodisch annimmt.
};
class AliveCondition : public BoundaryCondition
{
// Implementieren Sie hier eine Randbedingung welche annimmt,
// dass rund um das Rechengebiet lebende Zellen sitzen.
};
class DeadCondition : public BoundaryCondition
{
// Implementieren Sie hier eine Randbedingung welche annimmt,
// dass rund um das Rechengebiet tote Zellen sitzen.
};
class GameOfLifeRules : public Regel
{
public:
typedef TwoDBoolArray Daten;
GameOfLifeRules(BoundaryCondition& _bc) : bc(_bc) {}
// Implementieren Sie hier die Regeln des Game of Life
private:
BoundaryCondition& bc;
};
// Ein zellulärer Automat, der Regeln und Datenstrukturen von au�en bekommt
class Automat
{
public:
typedef TwoDBoolArray Daten;
Automat(Daten& daten, Regel& regel) : _daten(daten), _regel(regel)
{}
// mache n Schritte
void step(int n=1)
{
for (int i=0; i<n; ++i)
{
// Linux-spezifische Art und Weise den Inhalt der Konsole zu löschen
// und den Cursor nach oben links zu setzen.
std::cout << "\x1B[2J\x1B[H" << "Step " << i << std::endl << _daten;
// Das Wiedergeben der Lösung soll immer 10 Sekunden (=1e7 Mikrosekunden)
// dauern. Sie können diesen Wert auch ändern.
usleep(1.e7/n);
_regel.anwenden(_daten);
}
}
private:
Daten& _daten;
Regel& _regel;
};
int main(int argc, char** argv)
{
if (argc != 2)
{
std::cout << "Usage: ./<progname> <txt-file>" << std::endl;
return 1;
}
// Initialisiere die Datenstruktur
TwoDBoolArray a;
std::ifstream file;
file.open(argv[1]);
if (file.good())
file >> a;
else
{
std::cout << "Cannot read file" << std::endl;
return 1;
}
// Wähle Randbedingung
TorusCondition bc;
// Wähle ein Regelsystem
GameOfLifeRules rules(bc);
// Initialisiere den zellulären Automaten
Automat automat(a,rules);
// Experimentieren Sie hier mit Ihrem Automaten.
return 0;
}
|
|
|
Zeige Beiträge 1 bis 8 von 8 Treffern |
|
|
|