Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Suche » Suchergebnis » Hallo Gast [Anmelden|Registrieren]
Zeige Beiträge 1 bis 8 von 8 Treffern
Autor Beitrag
Thema: Streichelzoo
kleinerstrolch

Antworten: 2
Hits: 3.320
15.01.2015 14:47 Forum: Praktische Informatik


das endif habe ich nun weggelassen

soweit schon danke unglücklich
Thema: Streichelzoo
kleinerstrolch

Antworten: 2
Hits: 3.320
Streichelzoo 14.01.2015 23:19 Forum: Praktische Informatik


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
kleinerstrolch

Antworten: 1
Hits: 2.674
Gauss Elimination 13.01.2015 19:49 Forum: Praktische Informatik


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 - warumverwirrt bei a zumindest)
Thema: Hilfe bei CONWAYS GAME OF LIFE
kleinerstrolch

Antworten: 8
Hits: 6.648
08.01.2015 22:45 Forum: Praktische Informatik


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
kleinerstrolch

Antworten: 8
Hits: 6.648
08.01.2015 20:38 Forum: Praktische Informatik


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
kleinerstrolch

Antworten: 8
Hits: 6.648
08.01.2015 20:20 Forum: Praktische Informatik


nice immerhin ein teilabschnitt

das mit doppelpost ist eben weil es unendlich wichtig ist unglücklich
Thema: Hilfe bei CONWAYS GAME OF LIFE
kleinerstrolch

Antworten: 8
Hits: 6.648
08.01.2015 19:38 Forum: Praktische Informatik


keiner? unglücklich wäre wirklich extrem wichtig
Thema: Hilfe bei CONWAYS GAME OF LIFE
kleinerstrolch

Antworten: 8
Hits: 6.648
Hilfe bei CONWAYS GAME OF LIFE 08.01.2015 13:59 Forum: Praktische Informatik


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