anfänger braucht hilfe!!
-
hallo alle zusammen,
also ich bin ein Anfänger in C++ und in 3 tagen muss ich schon eine Aufgabe abgeben, wovon ich nichts kapiere, kann mir jemand bitte helfen...
also die aufgabenstellung schaut so aus..
I. Lernziel
Erstellen einer erste Klasse und ein Hauptprogramm, welches diese instanziiert.
II. Aufgabenstellung
Erstellen Sie eine Klasse Dice welches einen Würfel darstellt. Die Klasse soll (Pseudo-) Zufallszahlen
zwischen 1 und 6 generieren.
Weiters ist ein Hauptprogramm namens homework zu generieren, welches ein Objekt der Klasse
Dice instanziiert und mit der aktuellen Systemzeit initialisiert. Danach sollen drei Zufallszahlen
ausgegeben werden. Das Hauptprogramm soll den Returnwert 0 liefern.
Zufallszahlen
Ein Generator für Zufallszahlen wird mit der Funktion srand initialisiert; Zufallszahlen werden mit der
Funktion rand erzeugt. Lesen Sie sich hierzu
http://www.cplusplus.com/reference/clibrary/cstdlib/srand.html bzw
http://www.cplusplus.com/reference/clibrary/cstdlib/rand.html genau durch.
Output
Das Hauptprogramm gibt lediglich drei Zufallszahlen, eine pro Zeile, aus.
z.B.:
3\n
1\n
4\n
Weitere Ausgaben sind nicht erlaubt.Die Klasse Dice muss einen Konstruktor mit der Signatur
Dice(unsigned int seed)
beinhalten, welcher den Zufallszahlengenerator mit der Variable seed initialisiert.
Die Klasse Dice muss eine Methode mit der Signatur
int roll()
beinhalten, welche die nächste mit den Zufallszahlengenerator erzeugte Zahl retourniert.mein header: dice.h
class dice { private: int dice_symbol_; public: dice(unsigned int seed); ~dice(unsigned int seed); int roll(); };mit den seed, was man tut, weiß ich nicht

das hauptprogramm: homework.cpp
#include "dice.h" #include <stdlib.h> #include <iostream> #include <time.h> using std::cout using std::endl int main() { int number_roll; int dice_symbol_; srand( time(NULL) ); for(number_roll=0; number_roll<3; number_roll++) { dice_symbol_ = (rand()%6)+1; cout << dice_symbol_ << endl; } return 0;jetzt habe ich ein Makefile, der die beiden zusammen kompiliert:
foobar: homework.cpp dice.h
g++ -Wall -o homework.cpp dice.hich habe keine Ahnung was falsch sein konnte, ich habe einfach alles geschrieben, was ich wusste ... naja kann mir jemand bitte dringend helfen!!!
Danke im Voraus schon!
mfg tesunai
-
benutze bitte erstmal die code tags... und dann stell eine konrete frage, oder sag was für fehler kommen.
weiterhin denke ich, dass das eventuell ins projekte-forum gehört, oder willst du das selbst bauen? für mich hört es sich so an, als wolltest du, dass es dir jemand anderes baut...
so siehts mit codetags besser aus, oder?:
class dice { private: int dice_symbol_; public: dice(unsigned int seed); ~dice(unsigned int seed); int roll(); };#include "dice.h" #include <stdlib.h> #include <iostream> #include <time.h> using std::cout using std::endl int main() { int number_roll; int dice_symbol_; srand( time(NULL) ); for(number_roll=0; number_roll<3; number_roll++) { dice_symbol_ = (rand()%6)+1; cout << dice_symbol_ << endl; } return 0; }edit: was ist denn nun deine frage? oder soll ichs dir schnell schreiben? was würdest du ausgeben wollen?

-
danke erstmals fürs schnell schreiben!
naja ich habe das programm selbst geschrieben. bin aber ein anfänger und probiere einfach...
nach der aufgabenstellung soll das programm aus klasse und hauptprogramm bestehen und dice.h muss aber auch methode roll(); haben, also dreimel würfeln und 3 zufallszahlen müssen sie sein mit rand und srand funktion ...ich weiß nicht wo das fehler ist eben, also ich muss die 2 programme linken wollen mit foobar, aber er lässt sich nicht kompilieren, "zufriff verweigert" die warning
also einfach was ich sonst noch für das programm noch brauche, oder wo das fehler sein könnte, kannst du mir bitte sagen?
mfg tesunai!
-
also ich weiß nicht, was du mit zwei programme meinst..
ich geb dir mal nen denkanstoss:
du musst in der main() methode eine instanz der klasse "dice" erstellen und damit würfeln.
mal sehen, wenn ich morgen bock hab, code ich dir mal nen beispiel.
heut hab ich keinen bock mehr.übrigends: du solltest ein wenig auf deine rechtschreibung achten... es ist sehr schwer dich zu verstehen, wenn du fast ohne satzzeichen schreibst...
-
Danke!
-
Schittebön:
dice.h
class CDice { public: CDice(unsigned int seed); ~CDice(); int roll(); };dice.cpp
#include "dice.h" #include <stdlib.h> #include <iostream.h> CDice::CDice(unsigned int seed) { //Konstruktor srand(seed); //Zufallsgenerator initialisieren } CDice::~CDice() { //Destruktor // } int CDice::roll() { return (rand()%6)+1; //Zufallszahl zurückgeben }homework.cpp
#include "dice.h" #include <time.h> #include <iostream> using namespace std; int main() { CDice dice(time(NULL)); //Instanz erzeugen for(int i=0;i<3;i++) { cout << dice.roll() << endl << flush; //Rückgabe von roll() ausgeben } cin.get(); //damit man was sieht: vor'm Beenden auf User-Eingabe warten return 0; //Ende des Programms }Eine Member-Variable wie dice_symbol_ brauchst du für die Aufgabenstellung nicht.
-
Hier mal meine Variante... es ist denke ich eher so gedacht, da so der Sinn von Klassen besser zum Vorschein kommt

dice.h:#pragma once class CDice { public: CDice(unsigned int seed); virtual ~CDice(); int Roll(); };dice.cpp:
#include "dice.h" CDice::CDice(unsigned int seed) { srand(seed); } CDice::~CDice() { } int CDice::Roll() { return (rand()%6)+1; }main.cpp:
#include <iostream> #include <time.h> #include "dice.h" using namespace std; int main() { CDice dice(time(NULL)); //Instanz erzeugen for(int i = 0; i != 3; i++) cout << "Zufallszahl " << i + 1 << " " << dice.Roll() << endl << flush; cin.get(); return 0; }kann grad nicht kompilieren, sollte so aber funzen

-
allerdings sollte dein lehrer diesen thread hier finden, wenn er dir eine referenz zu dieser seite gibt
also solltest du den code genau erklären können
-> sorry hab grad gesehen, dass die referenz zu cpp.com ist.. also dochnicht hierher
aber er könnte es doch finden 
edit: ah, sehe grad, dass _matze seinen code bearbeitet hat
jetz haben wirs fast gleich 
edit2: in c++ schreibt man methoden/funktionen afaik groß...
-
Machine schrieb:
edit: ah, sehe grad, dass _matze seinen code bearbeitet hat
jetz haben wirs fast gleich 
Ja, ich hab auch gerade nach wesentlichen Unterschieden unserer Versionen gesucht. Ich hatte mir aber schon gedacht, dass du wohl mein erstes Posting gelesen hattest...

Machine schrieb:
edit2: in c++ schreibt man methoden/funktionen afaik groß...
Ok, dann schreib aber bitte auch Methoden und Funktionen groß!

Nein, du hast natürlich Recht, groß geschrieben ist es schöner.
-
tesunai, es wäre nett, wenn du dann schreiben würdest, obs gefunzt hat und was dein lehrer dazu gesagt hat

-
Ich denke, der Professor wird Plagiat dazu sagen

-
[quote="_matze"]Schittebön:
dice.h
class CDice { public: CDice(unsigned int seed); ~CDice(); ( :D ICH STELLE EINFACH MEINE FRAGEN DAZU; WOZU BRAUCHE ICH HIER NOCH EINE CDICE MIT GILDE ? ) int roll(); };dice.cpp
#include "dice.h" #include <stdlib.h> #include <iostream.h> CDice::CDice(unsigned int seed) { //Konstruktor srand(seed); //Zufallsgenerator initialisieren } ( :D WAS MACHT DIESES SEED EIGENTLICH; WOZU BRAUCHE ICH DAS ? ) CDice::~CDice() { //Destruktor // } ( :D WENN ICH EINE KONSTRUKTOR ERSTELLE; MUSS ES AUCH EINEN DESTRUKTOR GEBEN) int CDice::roll() { return (rand()%6)+1; //Zufallszahl zurückgeben }homework.cpp
#include "dice.h" #include <time.h> #include <iostream> using namespace std; int main() { CDice dice(time(NULL)); //Instanz erzeugen ( :D WAS MACHT INSTANZEN ? WOZU BRAUCHE ICH DIE ? ) for(int i=0;i<3;i++) { cout << dice.roll() << endl << flush; //Rückgabe von roll() ausgeben } cin.get(); //damit man was sieht: vor'm Beenden auf User-Eingabe warten return 0; //Ende des Programms }VIELEN DANKE FÜR DIE ANTWORT !!
-
ey komm.. arbeite erstmal nen tutorial oder buch zu den grundlagen durch. wir kauen dir hier alles vor und zeigst nicht ein bisschen eigeninitiative. solche leute kann ich leiden.
-
Machine schrieb:
ey komm.. arbeite erstmal nen tutorial oder buch zu den grundlagen durch. wir kauen dir hier alles vor und zeigst nicht ein bisschen eigeninitiative. solche leute kann ich leiden.
Wo genau ist denn dein Problem? Du selbst hast ihm doch auch 'ne komplette Lösung präsentiert. Außerdem ist er doch daran interessiert, das Programm zu verstehen (siehe sein letzter Post).
Zu deiner Gilde (Tilde heißt das Ding!): Jede Klasse hat einen Konstruktor, um sich zu initialisieren (hier srand-Aufruf) und einen Destruktor, um aufzuräumen und z.B. allozierten Speicher wieder freizugeben. Das gehört einfach zur Definition einer Klasse, auch wenn du für dieses einfache Beispiel nichts im Destruktor stehen hast.
Instanzen: Die class-Anweisung deklariert lediglich deine Klasse (Beschreibung). Um die Klasse im Programm zu verwenden, musst du eine Instanz dieser Klasse erzeugen. So wird erst das Objekt erzeugt und Speicher dafür reserviert. Außerdem vergibst du ja für die Instanz eine Bezeichnung (hier "dice"), über die du auf die Instanz zugreifen kannst. Du könntest natürlich auch mehrere Objekte/Instanzen dieser Klasse erzeugen. Wenn du eine Instanz erzeugst, wird der Konstruktor aufgerufen. Wird diese wieder zerstört (in diesem Fall implizit durch Beenden von main), wird der Destruktor aufgerufen.
Aber Machine hat insofern Recht, als dass du verstehen solltest, was du da machst. Bei der nächsten Hausaufgabe gibt's von mir keine Komplettlösung. Zieh dir am Besten ein Tutorial oder ein gutes Buch 'rein. Und da du jetzt ein funktionierendes Programm hast: verändere es an verschiedenen Stellen und sieh dir an, was passiert. Bei Fragen melde dich.
-
erstmals danke fürs antworten!
2. ich habe erst gar nicht nach einer komplette lösung gefragt, sondern eben, was im programm nicht passt, weil es sich nicht kompilieren lässt. oder eben was ich besser machen könnte, ich habe meine version schon abgegeben, und will von dieser seite nur lernen, wie man losprogrammiert.... weil plagiate, kann ich die komplette lösung sowieso nicht hernehmen...
ich beschäftige mich ab wochenende mit dem problem, weil ich außer programmieren auch andere fächer habe, in denen ich auch aufgaben abgeben muss.
ich danke euch für eure bemmühung, ich melde mich bestimmt!!!
-
_matze schrieb:
Machine schrieb:
ey komm.. arbeite erstmal nen tutorial oder buch zu den grundlagen durch. wir kauen dir hier alles vor und zeigst nicht ein bisschen eigeninitiative. solche leute kann ich leiden.
Wo genau ist denn dein Problem? Du selbst hast ihm doch auch 'ne komplette Lösung präsentiert. Außerdem ist er doch daran interessiert, das Programm zu verstehen (siehe sein letzter Post).
Zu deiner Gilde (Tilde heißt das Ding!): Jede Klasse hat einen Konstruktor, um sich zu initialisieren (hier srand-Aufruf) und einen Destruktor, um aufzuräumen und z.B. allozierten Speicher wieder freizugeben. Das gehört einfach zur Definition einer Klasse, auch wenn du für dieses einfache Beispiel nichts im Destruktor stehen hast.
Instanzen: Die class-Anweisung deklariert lediglich deine Klasse (Beschreibung). Um die Klasse im Programm zu verwenden, musst du eine Instanz dieser Klasse erzeugen. So wird erst das Objekt erzeugt und Speicher dafür reserviert. Außerdem vergibst du ja für die Instanz eine Bezeichnung (hier "dice"), über die du auf die Instanz zugreifen kannst. Du könntest natürlich auch mehrere Objekte/Instanzen dieser Klasse erzeugen. Wenn du eine Instanz erzeugst, wird der Konstruktor aufgerufen. Wird diese wieder zerstört (in diesem Fall implizit durch Beenden von main), wird der Destruktor aufgerufen.
Aber Machine hat insofern Recht, als dass du verstehen solltest, was du da machst. Bei der nächsten Hausaufgabe gibt's von mir keine Komplettlösung. Zieh dir am Besten ein Tutorial oder ein gutes Buch 'rein. Und da du jetzt ein funktionierendes Programm hast: verändere es an verschiedenen Stellen und sieh dir an, was passiert. Bei Fragen melde dich.
ich meine: wenn schon jemand so nett ist mir eine komplettlösung zu geben und ich was nicht verstehe, dann zeige ich n bisschen eigeninitiative und versuche erstmal selbst rauszufinden, was instanzen sind und was man damit macht. das gehört sich einfach so.
und mir kann keiner erzählen, dass man das nicht rausfindet.
aber egal..@tesunai: eine komplettlösung war das angebrachteste um dir zu zeigen, was du besser machen kannst
