Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

11

25.11.2007, 19:02

Hallo,
das Problem ist aber das deine Version unsauber programmiert ist.

Das Beispiel über mir zeigt mein zweiten Lösungsansatz.
Und zwar alles in einer Klasse unter zubringen.
Somit fallen die unnötigen globalen Variablen weg.

Die Beenden funktion kannst du dir auch so sparen.
Die Anweisungen der Funktion kannst du auch direkt in die Schleife packen.
Somit hast du alles unter einem Hut.

Auch solltest du der Klasse dann noch saubere Set/Get Methoden hinzufügen, damit du nicht beim setzten der Wert irgendwelche unmöglichen Werte setzten kannst.

Beispiel:

C-/C++-Quelltext

1
Zylinder_1_Wasserpegel = Zylinder_1_Wasser/PI/(Zylinder_1_Radius*Zylinder_1_Radius);


Wenn jemand für Zylinder_1_Radius 0 setzt, wird eine Division durch 0 versucht.
Sowohl Mathematiker als auch Informatiker wissen, dass dies zu einem Problem führt -> Kurz um dein Programm crasht.

Mit einem Vergleich auf 0 kannst du dann auch wieder mit einer Schleife einen Wert eingeben lassen, der gültig ist.

Musst also noch einige Fehler ausmerzen.

MFG T-Virus
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

12

25.11.2007, 19:16

Zitat

Das Beispiel über mir zeigt mein zweiten Lösungsansatz.
Und zwar alles in einer Klasse unter zubringen.
Somit fallen die unnötigen globalen Variablen weg.


Dann kann er sie genauso gut gleich global machen. Eine Klasse macht nur dann Sinn wenn sie die Daten vernünftig und sinnvoll kapselt. Sie dient nicht als Müllentsorgung für globale Variabeln.
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

13

25.11.2007, 20:49

Hm, so ähnlcih hab ich das auch gedacht, dass das ja eigentlich unnötig ist. naja, hab ja noch nicht so viel Erfahrung, war mehr so eine Übung ;)
Ich werd mir die Vorschläge nochmal zur gegebenen Zeit anschauen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

14

25.11.2007, 21:01

Zitat von »"T-VIRUS"«


Das Beispiel über mir zeigt mein zweiten Lösungsansatz.
Und zwar alles in einer Klasse unter zubringen.
Somit fallen die unnötigen globalen Variablen weg.


Was für ein Unsinn. Hast Du irgendwo mal gehört "globale Variablen sind böse, nicht gebrauchen"? Genau so hörst Du dich nämlich an. Wenn er das komplette Programm in eine Klasse packt hat das den selben Effekt, nur ist es im Längen dämlicher. Es spricht in diesem Fall garnichts gegen globale Variablen und ein objektorientierten Lösungsansatz wäre meiner Meinung nach, für dieses Problem, total unsinnig, da extrem überladen.
@D13_Dreinig

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

15

25.11.2007, 21:05

kk, wenn ich nochma drüber nachdenke wär es nat förderlich für den objektbasierten Ansatz, nicht 4 Zylinder in 1 Klasse zu packen sondern einen Zylinder und dann 4 Objekte zu erstellen :)

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

16

25.11.2007, 21:31

Hallo grek40,
das wäre auch eine Lösung.
Da aber keiner den kompletten Text gelesen hat, hat auch niemand verstanden warum die globalen Variablen hier hohe Probleme erzeugen!

Wenn einer der radiuse = 0 ist, dann crasht das Programm.
Bei Set Methoden kann man dies immer prüfen und es gibt keine Gefahr mehr von den globalen Variablen, die man ja so toll im überblick hat.

Ich denke meine Bedenken gegenüber den globalen Variablen sollten klar sein.
Diese Gefahr wird auch in den meisten C++ Büchern gleich erklärt.

In C++ für Spieleprogrammierer auf Seite 99 im Abschnitt "globale Variablen am Pranger" :p

MFG T-Virus
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Nico

Frischling

Beiträge: 82

Wohnort: Nürnberg

  • Private Nachricht senden

17

26.11.2007, 09:15

Zitat von »"David_pb"«

Zitat von »"T-VIRUS"«


Das Beispiel über mir zeigt mein zweiten Lösungsansatz.
Und zwar alles in einer Klasse unter zubringen.
Somit fallen die unnötigen globalen Variablen weg.


Was für ein Unsinn. Hast Du irgendwo mal gehört "globale Variablen sind böse, nicht gebrauchen"? Genau so hörst Du dich nämlich an. Wenn er das komplette Programm in eine Klasse packt hat das den selben Effekt, nur ist es im Längen dämlicher. Es spricht in diesem Fall garnichts gegen globale Variablen und ein objektorientierten Lösungsansatz wäre meiner Meinung nach, für dieses Problem, total unsinnig, da extrem überladen.


Nein, globale Vars sind nicht gleich böse. Aber hier wurde doch die Hose mit der Beisszange angezogen. Der Code ist einfach zu unübersichtlich. Ein paar Übergabewerte würden den Code vor allem wiederverwendbarer machen.
Der Ansatz mit der Klasse ist nicht schlecht, allerdings würde ich es anders aufziehen.
Erstmal ein paar orderntliche Getter und die Berechnung in einer Funktion, als Übergabe die Werte die als Basis der Berechnung dienen.
Dann is das ganze auch gut wiederverwendbar....
Aber jeder hat seinen eigenen Stil ;).

edit:
Noch ein Zusatz. Bei so einem kleinen Programm mag das vielleicht so ok sein, aber wenn Du Dir sowas angewöhnst, wirst du bei größeren Projekten mit diesem Stil Probleme kriegen. Ergo, erst gar nicht angewöhnen sowas.^^
lg

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

18

26.11.2007, 09:39

Hallo Nico,
stimmt.
Ich denke wenn es schlichter sein soll, dann sollte hier mit Funktionen und Rückgabe werten gearbeitet werden.
Man kann hier für die Zylinderberechnungen sogar eine Funktion schreiben, die die Eingaben zurück gibt.
Diese zweimal aufgerufen und man kann mit lokalen Variablen arbeiten.

MFG T-Virus
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

19

26.11.2007, 15:21

Zitat von »"Nico"«


Nein, globale Vars sind nicht gleich böse. Aber hier wurde doch die Hose mit der Beisszange angezogen. Der Code ist einfach zu unübersichtlich. Ein paar Übergabewerte würden den Code vor allem wiederverwendbarer machen.


Durchaus kann man das machen.
Mir fällt nur immer wieder auf das einige meinen, allgemein sagen zu müssen, globale Variablen seien schlecht. Und nicht selten kommen dann grenzwertige Lösungsansätze wie z.B. ein Singeltonpattern.

Zitat von »"Nico"«


edit:
Noch ein Zusatz. Bei so einem kleinen Programm mag das vielleicht so ok sein, aber wenn Du Dir sowas angewöhnst, wirst du bei größeren Projekten mit diesem Stil Probleme kriegen. Ergo, erst gar nicht angewöhnen sowas.^^
lg


Falls das an mich gerichtet war... Danke für den Rat. Aber ich bin der Meinung mit großen Projekten vertraut zu sein.
@D13_Dreinig

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

20

26.11.2007, 16:26

ich bin gerade am neuschreiben des Programms, aber es kommt immer der fehler:
too few arguments to function 'float fnZ_1_P(int, float)
dazu folgender Codeabschnitt:

C-/C++-Quelltext

1
float fnZ_1_P(int nZ_1_W, float fZ_1_R);

C-/C++-Quelltext

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
float fnZ_1_P(int nZ_1_W, float fZ_1_R)
{
      float fWasserpegel;
      fWasserpegel = nZ_1_W/PI/(fZ_1_R*fZ_1_R);
      return fWasserpegel;
}
int main()
{
    int nZ_1_W;
    int nZ_2_W;
    float fZ_1_R;
    float fZ_2_R;
    float fZ_3_R;
    float fZ_4_R;
    float fZ_1_P;
    nZ_1_W = fnZ_1_W();
    nZ_2_W = fnZ_2_W();
    fZ_1_R = fnZ_1_R();
    fZ_2_R = fnZ_2_R();
    fZ_3_R = fnZ_3_R();
    fZ_4_R = fnZ_4_R();
    fZ_1_P = fnZ_1_P();
    cout << endl <<fZ_1_P<<endl;
    return 1;
}

Was ist falsch?
// Z : zylinder
// R : Radius
// W : Wasser
// 1-4 : Nummer des Zylinders
// P : Wasserpegel

edit[\b]Ich habs, dummer Fehler- ich habe ein Buch und bin gerade am lesen, ist nur etwas verwirrend :roll:

Werbeanzeige