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

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

1

25.11.2007, 00:08

kleines Programm für den Chemieunterricht

Hallo allerseits,

ich habe mal ein kleines Programm geschrieben, welches eine Mathematisierug eines Versuches zur Hin- und Rückreaktion ist.

Hierbei hatten wir vier Zylinder. Zwei grosse (oben offen, unten geschlossen) und zwei kleinere (oben und unten offen).
In den einen Zylinder wurde Wasser gegossen, der andere bleibt vorerst leer. Jetzt werden mit Zylinder 3&4 (klein) Wasser aus Zylinder 1&2 herausgenommen (je nach dem, wie hoch der Wasserstand und der Radius von Zylinder 3 oder 4 ist) und jeweils in den anderen Zylinder eingefüllt (dies geschieht alles gleichzeitig).
Dies sollte so lange wiederholt werden, bis sich die Wasserpegelstände nicht mehr veränderten.

Wir hatten
Zylinder 1:
Radius : 1,5 cm
Wasser: 40 ml
Zylinder 2:
Radius : 1,5 cm
Wasser: 40 ml

Zylinder 3:
Radius: 0,8 cm
Zylinder 4:
Radius: 0,6 cm

Der Wasserstand in den beiden Zylindern 1&2 ändert sich nach 23 Durchführungen nicht mehr.
Hier jetzt der Quellcode (vll. etwas umständlich programmiert) :

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
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//******************************************************************************

// Dieses Programm berechnet das Volumen von Wasser (in ml) in zwei Zylindern.

// Dabei kann durch verschiedene Parameter der Zylinderradius und die Masse des Wassers in den Zylindern in ml eingestezt werden.

// Nach und nach werden mit zwei weiteren Zylinder Wasser aus den ersten Beiden ausgetauscht:

// Bsp: Zylinder 1 hat 50ml Wasser, Zylinder 2 ist leer. Jetzt wird mit Zylinder 3 aus Zylinder 1

// so viel Wasser entnommen, wie es die Höhe (variabel) des Wasserpegels zulässt. Das gleiche gilt für Zylinder 2 und 4.

// Nun wird der Inhalt von Zylinder 3 in Zylinder 2 geschüttet, der Inhalt aus Zylinder 4 wird in

// Zylinder 1 gekippt. Hier wird dieser Vorgang so lange wiederholt, wie eingegeben wurde.

//****************************************************************************** 


#include <iostream>
using namespace std;

//Konstanten:

const float PI = 3.141592654;

// Variabeln werden deklariert:

float Zylinder_1_Wasser;       //Wasser in ml in Zylinder 1                     

float Zylinder_1_Radius;       //Radius in mm von Zylinder 1

float Zylinder_1_Wasserpegel;  //Wasserpegel/höhe in cm von Zylinder 1

float Zylinder_2_Wasser;       
float Zylinder_2_Radius=0;
float Zylinder_2_Wasserpegel;
float Zylinder_3_Radius;
float Zylinder_3_Wasser;       //Wasser in ml, die Zylinder 3 aus Zylinder 1 aunimmt und in Zylinder 2 abgibt

float Zylinder_4_Radius;
float Zylinder_4_Wasser;
float Differenzvolumen_1;
float Differenzvolumen_2;
int Anzahl_der_Durchfuehrungen;
string beenden;
int main();

void Zylindermasse_1()
{
     cout << "Masse fuer Zylinder 1:";
     cout << "\nRadius [in cm] : ";
     cin >> Zylinder_1_Radius;
     cout << "Wasser [in ml]: ";
     cin >> Zylinder_1_Wasser;
     Zylinder_1_Wasserpegel = Zylinder_1_Wasser/PI/(Zylinder_1_Radius*Zylinder_1_Radius);
     cout << "Der Wasserpegel von Zylinder 1 liegt bei " << Zylinder_1_Wasserpegel <<"mm";
}

void Zylindermasse_2()
{
     cout << "\n\nMasse fuer Zylinder 2:";
     cout << "\nRadius [in cm] : ";
     cin >> Zylinder_2_Radius;
     cout << "Wasser [in ml]: ";
     cin >> Zylinder_2_Wasser;
     Zylinder_2_Wasserpegel = Zylinder_2_Wasser/PI/(Zylinder_2_Radius*Zylinder_2_Radius);
     cout << "Der Wasserpegel von Zylinder 2 liegt bei " << Zylinder_2_Wasserpegel <<"mm";
}

void Zylindermasse_3()
{
     cout << "\n\nMasse fuer Zylinder 3:";
     cout << "\nRadius [in cm] : ";
     cin >> Zylinder_3_Radius;
}

void Zylindermasse_4()
{
     cout << "\n\nMasse fuer Zylinder 4:";
     cout << "\nRadius [in cm] : ";
     cin >> Zylinder_4_Radius;
}

void Umfuellen()
{
          int counter =0;
          cout << "\nAnzahl der Durchfuehrungen: ";
          cin >> Anzahl_der_Durchfuehrungen;
          while(counter<Anzahl_der_Durchfuehrungen)
          {
          Zylinder_1_Wasserpegel = Zylinder_1_Wasser/PI/(Zylinder_1_Radius*Zylinder_1_Radius);
          Zylinder_2_Wasserpegel = Zylinder_2_Wasser/PI/(Zylinder_2_Radius*Zylinder_2_Radius);
          Zylinder_3_Wasser = (Zylinder_3_Radius*Zylinder_3_Radius)*PI*Zylinder_1_Wasserpegel;
          Zylinder_4_Wasser = (Zylinder_4_Radius*Zylinder_4_Radius)*PI*Zylinder_2_Wasserpegel;
          Differenzvolumen_1 = Zylinder_1_Wasser - Zylinder_3_Wasser;
          Differenzvolumen_2 = Zylinder_2_Wasser - Zylinder_4_Wasser;
          Zylinder_1_Wasser = Differenzvolumen_1 + Zylinder_4_Wasser;
          Zylinder_2_Wasser = Differenzvolumen_2 + Zylinder_3_Wasser;
          counter++;
          cout << "\n\nZylinder 1   Nr. " << counter << "Wasser [in ml]: " << Zylinder_1_Wasser;
          cout << "\nZylinder 2   Nr. " << counter << "Wasser [in ml]: " << Zylinder_2_Wasser;
          }
}

int Beenden()
{
         cout << "\nWollen Sie das Programm beenden? (y) ";
      cin >> beenden;
      if (beenden == "y")
         return 1;
      else
      {
          cout << "\n\n\n\n\n\n";
          main();
      }
}

int main()
{
      Zylindermasse_1();
      Zylindermasse_2();
      Zylindermasse_3();
      Zylindermasse_4();
      Umfuellen();
      Beenden();
}

T-VIRUS

Alter Hase

Beiträge: 548

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

Beruf: Schüler

  • Private Nachricht senden

2

25.11.2007, 10:54

Hallo,
das ist echt ein extremes Programm.

Hau die ganzen Globalen vars raus.
Das ist kein sauberer Stil.

Bastel doch eine Klasse für das Programm.
Oder arbeite mal mit Rückgabewerten.

Also wenn es ein sauberes Programm werden soll musst du noch ne Menge ändern.

MFG T-Virus
Meine Blog:)

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

MFG T-VIRUS

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

3

25.11.2007, 11:36

Wiso rausnehmen? Die werden doch in fast jeder Funktion gebraucht. Ausserdem sind die dann nicht alle verteilt, so hat man besseren Überblick, welche Variablen existieren...

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

4

25.11.2007, 11:51

Dann initialisier sie wenigstens ... Aber ich würde T-VIRUS schon zustimmen, dein Vorgehen ist sehr ... brachial! Alleine Rückgabewerte würden das imho sehr viel eindeutiger machen.

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

5

25.11.2007, 12:24

Ich bin mir zwar net sicher, aber ich würde eine while-schleife oder so verwenden,
anstatt main() aufzurufen.

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

6

25.11.2007, 12:48

Was soll ich denn zurückgeben? Das, was ich sowieso schon festgelegt habe (Variabeln) oder wie meinst du das? Im Grunde genommen wird ja jede Variable dann Initialisiert, wenn sie gebraucht wird, wozu nochmehr schreibarbeit und verwirrung?
naja, ich versuchs nochmal umzustrukturieren.

T-VIRUS

Alter Hase

Beiträge: 548

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

Beruf: Schüler

  • Private Nachricht senden

7

25.11.2007, 12:51

Hallo databyte,
das ist auch das beste.

Die Beenden Funktion ist zwar gut benannt, aber besser wäre es diese in der Schleife aufzurufen und einen Rückgabewerte zuübergeben, der die Schleife kontrolliert.

bsp

Die Schleife deines Programms:

C-/C++-Quelltext

1
2
3
4
5
6
bool bQuit = false;

while(bQuit != true)
{
 bQuit = Beenden();
}


Hier nun das neue Beenden:

C-/C++-Quelltext

1
2
3
4
5
6
bool Beenden()
{
 bool bQuit = false;
 // ...Hier Abfrage und spätere ergebnis.

 return bQuit;
}


Somit kannst du die Schleife durch die Eingabe aus bool Beenden() zum ende bringen ;)

MFG T-Virus
Meine Blog:)

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

MFG T-VIRUS

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

8

25.11.2007, 14:26

Danke, ich werds mal ausprobieren. Aber nicht mehr heute, schreiben morgen Spanischklausur...etc.

edit:
so, ich habe mir jetzt doch nochmal schnell alle Variablen in die Funktionsköpfe gepackt aber das kann nicht als Übersichtlich bezeichnen...die Umfüllenfunktion verwendet alle Variablen, damit hatte ich drei Bildschirmlängen voll...(17''). Ausserdem war alles dann durcheinander, da finde ich meine Version besser. Das mit den Rückgabewerten geht auch nicht bzw. dann müsste ich für jeden kleinen Arbeitsschritt eine neue Funktion verwenden, da bei der Version oben mehrere Werte zurückgegeben werden.
So bleibt nur das mit der beenden Funktion übrig...

T-VIRUS

Alter Hase

Beiträge: 548

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

Beruf: Schüler

  • Private Nachricht senden

9

25.11.2007, 14:49

Hallo,
ah kenne ich ;)
Muss Montag SQL, Diensttag Netzwerke und Mittwoch C Arbeit schreiben ;)

SQL und C sind aber kein Problem für mich :o)

MFG T-Virus
Meine Blog:)

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

MFG T-VIRUS

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

10

25.11.2007, 18:02

Re: kleines Programm für den Chemieunterricht

Zitat

edit:
so, ich habe mir jetzt doch nochmal schnell alle Variablen in die Funktionsköpfe gepackt aber das kann nicht als Übersichtlich bezeichnen...die Umfüllenfunktion verwendet alle Variablen, damit hatte ich drei Bildschirmlängen voll...(17''). Ausserdem war alles dann durcheinander, da finde ich meine Version besser.


Mal nen kleiner, unvollständiger Denkansatz^^:

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
26
27
28
29
30
31
32
class ZylinderVolumen
{
private:
  //Konstanten:

  static const float PI = 3.141592654;

  // Variablen:

  float Zylinder_1_Wasser;       //Wasser in ml in Zylinder 1                     

  float Zylinder_1_Radius;       //Radius in mm von Zylinder 1

  float Zylinder_1_Wasserpegel;  //Wasserpegel/höhe in cm von Zylinder 1

  float Zylinder_2_Wasser;       
  float Zylinder_2_Radius=0;
  float Zylinder_2_Wasserpegel;
  float Zylinder_3_Radius;
  float Zylinder_3_Wasser;       //Wasser in ml, die Zylinder 3 aus Zylinder 1 aunimmt und in Zylinder 2 abgibt

  float Zylinder_4_Radius;
  float Zylinder_4_Wasser;
  float Differenzvolumen_1;
  float Differenzvolumen_2;
  int Anzahl_der_Durchfuehrungen;
  std::string beenden;

public:
  void Zylindermasse_1();
  void Zylindermasse_2();
  void Zylindermasse_3();
  void Zylindermasse_4();

  void Umfuellen();

  bool Beenden();
};


// Wobei Beenden eigentlich schon nicht mehr in die Klasse gehört, da es herzlich wenig mit dem Zylinder zu tun hat ;)

Werbeanzeige