Berechnung beliebig vieler Zahlen mit Hilfe von Funktion
-
Hallo liebe C++-Community,
ich habe ein "riesiges" (für viele bestimmt einfaches) Problem und hoffe, dass ihr mir in irgendeiner Weise helfen könnt.
Es handelt sich hier um ein Programm, das dazu dient verschiedene elektrotechnische Größen (wie unter anderem Widerstände, (Teil-) Leistung der Widerstände, Teilspannungen uvm.) zu berechnen.
Das Programm ist in 2 Stränge gegliedert:
- Parallelschaltung
- ReihenschaltungIch möchte eine ausgelagerte Funktion für den Gesamtwiderstand einer Reihenschaltung berechnen, jedoch mit beliebig vielen Werten.
Das heißt: Es wird die angelegte Spannungen abgefragt, die Anzahl der Widerstände, welche Schaltung vorliegt und die dazugehörigen Werte der Widerstände.Es tut sich hierbei aber immer wieder ein Problem auf und zwar, dass die Berechnung des Gesamtwiderstandes (Reihenschaltung) aus irgendeinem Grund nicht erfolgt.
Wenn ich die Funktion für die Reihenschaltung richtig habe, ist alles andere viel einfacher. Ich sitze schon seit gut 6 Stunden vor den PC und finde den Fehler einfach nicht (Ich muss hinzufügen, dass ich noch Anfänger bin). Ich bin für jegliche Hilfe dankbar!
Code:
#include <iostream> #include <iomanip> #include <cstdlib> #include <vector> using namespace std; float reihenwid (float gesamtr, float eing, int erneut) { gesamtr = gesamtr + eing; erneut ++; cout << gesamtr; return (gesamtr); } int main(int argc, char *argv[]) { /* Allgemeine Variablen */ char nochmal; int choice; int widerstaende; float widwert; float spannung; /* Variablen für Funktionen */ float anzahl; float eing; float gesamtr=0; // Initialisierung des Gesamtwiderstandes mit 0 int erneut=1; // Initialisierung von nochmal mit 1 float reihenwid (float gesamtr, float eing); do { cout << "Elektro-Technik-Elektronischer Taschen Rechner (ET-ETR)" << endl; // Überschrift cout << "*******************************************************" << endl; // Überschrift cout << "\n"; /********************ABFRAGE VON SCHALTUNGSKOMPONENTEN*******************/ cout << "Geben Sie den Wert der angelegten Spannung ein!\n" << endl; // Ausgabe: Frage nach Spannungshöhe cout << "Spannungswert [in Volt]: "; cin >> spannung; // Eingabe des Spannungswertes cout << "\n"; cout << "Geben Sie die Anzahl der Widerstaende ein!" << endl; cout << "\nAnzahl: "; cin >> anzahl; // Eingabe von der gewünschten Anzahl der Zahlen /* Festlegung der Widerstandswerte erfolgt später! */ /****************ENDE ABFRAGE VON SCHALTUNGSKOMPONENTEN******************/ system ("cls"); cout << "Bitte geben Sie die Art Ihrer Schaltung ein!\n\n"; // Ausgabe: Frage nach Art der Schaltung cout << "<1> = Parallelschaltung\n"; // Wahl 1 = Parallelschaltung cout << "<2> = Reihenschaltung\n\n"; // Wahl 2 = Reihenschaltung cout << "Ihre Wahl: <->\b\b"; // Ausgabe: Wahl cin >> choice; // Eingabe der Wahl (1 oder 2) system ("cls"); // Bildschirm "putzen" switch (choice) { /* Anfang: "switch-Befehl" */ /***********************ANFANG: PARALLELSCHALTUNG************************/ case 1: // Wahl 1: Parallelschaltung cout << "\n"; cout << "Sie haben 'Parallelschaltung' gew"<< "\x84"<< "hlt!" << endl; /*******************BERECHNUNG: GESAMTWIDERSTAND*************************/ while(erneut <= anzahl) // Beginn der While-Schleife { cout << "\n"; cout << "Widerstand Nr. " << erneut << ": "; cin >> eing; // Eingabe der Widerstandswerte gesamtr = gesamtr + 1/eing; // Berechnung des Gesamtwiderstandes erneut++; // Addiert auf Variable nochmal +1 } cout << "\n"; cout << "Der Gesamtwiderstand betr" << "\x84" << "gt: " << gesamtr << endl; // Ausgabe der Summe break; // Abschluss vom "ersten Fall" /***********************ENDE: PARALLELSCHALTUNG**************************/ /***********************ANFANG: REIHENSCHALUNG***************************/ case 2: // Wahl 2: Reihenschaltung cout << "\n"; cout << "Sie haben 'Reihenschaltung' gew"<< "\x84"<< "hlt!" << endl; /*******************BERECHNUNG: GESAMTWIDERSTAND*************************/ while(erneut <= anzahl) // Beginn der While-Schleife { cout << "\n"; cout << "Widerstand Nr. " << erneut << ": "; cin >> eing; float reihenwid (float gesamtr, float eing, float erneut); erneut++; } cout << "\n"; cout << "Der Gesamtwiderstand betr" << "\x84" << "gt: " << gesamtr << endl; // Ausgabe der Summe break; // Abschluss vom "zweiten Fall" /**********************ENDE: REIHENSCHALTUNG*****************************/ default: cout << "\nFehler bei der Auswahl !\n\n"; break; } cout << "\n\nNochmal? Dann bitte j eingeben!\n"; // Abfrage ob erneuter Start cout << "Ihre Wahl: " << endl; cin >> nochmal; // Einlesen von Wahl cout << "\n\n" << endl; // Zeilensprünge } /* Ende: "switch-Befehl" */ while (nochmal == 'j'); // Wenn j bzw. J erneuter Start sonst Schluss cout << "\nDas Programm wird beendet!\n"; // Hinweis, dass Programm beendet wird return 0; // Anfangszustand }
P.S.: Ich muss hinzufügen, dass die Formel für die Parallelschaltung falsch ist. Das Problem kann ich aber noch lösen.
-
LnyGiant schrieb:
Es tut sich hierbei aber immer wieder ein Problem auf und zwar, dass die Berechnung des Gesamtwiderstandes (Reihenschaltung) aus irgendeinem Grund nicht erfolgt.
Der Grund ist unter anderem, dass du die Funktion gar nicht aufrufst. Aber es würde auch sonst nicht funktionieren...
float reihenwid (float gesamtr, float eing, int erneut) { gesamtr = gesamtr + eing; erneut ++; cout << gesamtr; return (gesamtr); }
Eher so:
float reihenwid(float r1, float r2) { return r1 + r2; ]
Was auch immer du mit dem Erhöhen von "erneut" bezwecken wolltest (und was ohne Referenzparameter keinen Effekt gehabt hätte), gehört höchstwahrscheinlich nicht in diese Funktion.
float reihenwid (float gesamtr, float eing);
Wozu die nochmalige Deklaration? Noch dazu stimmt die Signatur nicht mit der oben überein.
while(erneut <= anzahl) // Beginn der While-Schleife { cout << "\n"; cout << "Widerstand Nr. " << erneut << ": "; cin >> eing; float reihenwid (float gesamtr, float eing, float erneut); erneut++; }
Das ist eine Funktionsdeklaration, kein Aufruf. Da gehört sowas hin wie:
gesamtr = reihenwid(gesamtr, eing);
BTW das ganze cin/cout/do-while-Gedöns, das mit dem Problem nichts zu tun hat, solltest du beim Posten weglassen.
-
Habe mir vorhin das alles mal in Ruhe angeguckt und genau die gleichen (dummen) Fehler entdeckt, die du aufgelistet hast.
Hat wohl an den 3 Stunden Schlaf gelegen. Was ein Mittagsschlaf alles bewirken kann..
Vielen Dank für die Hilfe und läuft alles wie geschmiert.