Gesamtwiederstand Parallelschaltung ?!
-
Hi
Ich soll auf meiner FH ein Programm resistors2.cpp schreiben. In diesem Programm soll der Gesamtwiederstand für eine Reihen- und eine Parallelschaltung ausgegeben werden. Das ganze soll in einer "while-Schleife" funktionieren und mit "0" das Ergebnis ausgeben. Bei einem negativen Wert die erneute eingabe fordern.
Hinweise:
Für den Gesamtwiderstand gilt bei Reihenschaltung: Rreihe = R1 + R2 .. + Rn
bei Parallelschaltung: 1/Rpara = 1/R1 + 1/R2 .. + 1/Rn
Der Kehrwert des Widerstandes wird auch als Leitwert bezeichnet: L = 1/R
(Hinweis: 1/R ist links vom Zuweisungssymbol nicht erlaubt.)
Achtung: Die Division durch Null ist undefiniert bzw. verboten !Krieg es mit dem Parallelwiederstand nicht hin!
Denke es lieggt an den Variabelen (global/lokal)Mein Versuch:
#include <iostream>
using namespace std;void main(){
double wert,
reihe = 0.0,
para = 0.0,
leit;while ( wert > 0.0 ){
cout << "\nSo lange Sie wollen koennen Sie 'positive' Wiederstandswerte eingeben.\n";
cout << "Eingabe mit 'ENTER' bestaetigen und beenden mit '0': " << endl;
cin >> wert;if ( wert < 0 ){
cout << "\n\nDer eingegebene Wert ist kleiner Null!\n";
cout << "Bitte Wert neu eingeben:\n";
cin >> wert;
}reihe = wert + reihe;
leit = 1.0 / wert;
para = 1.0 / ( leit + para );
}cout << "\n\nDie Reihenschaltung betaegt: " << reihe << endl;
cout << "Die Parallelschaltung betaegt: " << para << endl;
}Könnt ihr das Problem enddecken?
Würd mich über Hilfe freuhen.mfG Malte
-
du gibst "0" zum beenden ein und rechnest dann damit weiter.
... reihe = wert + reihe; leit = 1.0 / wert; // <--- Division durch 0 para = 1.0 / ( leit + para ); ...
mach am besten nach'm einlesen von wert gleich ne abfrage, ob wert == 0 und spring dann mit break aus der while-schleife raus.
-
c00L schrieb:
Könnt ihr das Problem enddecken?
Ja:
c00L schrieb:
Hinweise: [...]
Achtung: Die Division durch Null ist undefiniert bzw. verboten !Außerdem würde ich deine Implementierung für die Parallelschaltungs-Formel nochmal nachrechnen, ich vermute, dass du an einer Stelle Leitwert und Widerstandswert verwechselt hast.
dekcarki schrieb:
mach am besten nach'm einlesen von wert gleich ne abfrage, ob wert == 0 und spring dann mit break aus der while-schleife raus.
Dann wäre die Bedingung der while-Schleife überflüssig. Besser wäre es, den Tipp mit dem Leitwert zu berücksichtigen:
c00L schrieb:
Der Kehrwert des Widerstandes wird auch als Leitwert bezeichnet: L = 1/R
-
dekcarki schrieb:
du gibst "0" zum beenden ein und rechnest dann damit weiter.
... reihe = wert + reihe; leit = 1.0 / wert; // <--- Division durch 0 para = 1.0 / ( leit + para ); ...
mach am besten nach'm einlesen von wert gleich ne abfrage, ob wert == 0 und spring dann mit break aus der while-schleife raus.
Meintest du das so?
#include <iostream>
using namespace std;void main(){
double wert,
reihe = 0.0,
para = 0.0,
leit;while ( wert > 0.0 ){
cout << "\nSo lange Sie wollen koennen Sie 'positive' Wiederstandswerte eingeben.\n";
cout << "Eingabe mit 'ENTER' bestaetigen und beenden mit '0': " << endl;
cin >> wert;if ( wert == 0 ){ // Pruefung auf 0
break;
}if ( wert < 0 ){
cout << "\n\nDer eingegebene Wert ist kleiner Null!\n";
cout << "Bitte Wert neu eingeben:\n";
cin >> wert;
}reihe = wert + reihe;
leit = 1.0 / wert;
para = 1.0 / ( leit + para );
}cout << "\n\nDie Reihenschaltung betaegt: " << reihe << endl;
cout << "Die Parallelschaltung betaegt: " << para << endl;
}Sorry !! das ich keine Kommentare im quellcode verwendet hab.., aber is ja zun Glueck noch einigermaßen ueberschaubar.. ein Ergebnis bekomm ich schon mal, ob es auch richtig ist. Es ne andere Frage ^^
-
ich versteh nicht genau, wo ich eine division durch "0" habe!
leit = 1 / wert; // "wert" wird doch ein wert zugewiesen durch das "cin"
para = 1 / ( leit + para );
glaube auch, dass es besser wäre ohne das "break"
-
hab es geschafft !
#include <iostream>
using namespace std;void main(){
double wert,
reihe = 0.0,
para = 0.0,
leit = 0.0;cout << "\nSo lange Sie wollen koennen Sie 'positive' Wiederstandswerte eingeben.\n";
cout << "Eingabe mit 'ENTER' bestaetigen und beenden mit '0':" << endl;
cin >> wert;while ( wert <= 0.0 ){
cout << "\n\nDer eingegebene Wert ist kleiner oder gleich Null!\n";
cout << "Bitte Wert neu eingeben:\n";
cin >> wert;
}while ( wert > 0.0 ){
reihe = wert + reihe;
leit = ( 1.0 / wert ) + ( leit );cout << "\nSo lange Sie wollen koennen Sie 'positive' Wiederstandswerte eingeben.\n";
cout << "Eingabe mit 'ENTER' bestaetigen und beenden mit '0': " << endl;
cin >> wert;while ( wert < 0.0 ){
cout << "\n\nDer eingegebene Wert ist kleiner Null!\n";
cout << "Bitte Wert neu eingeben:\n";
cin >> wert;
}}
para = 1.0 / leit;
cout << "\n\nDie Reihenschaltung betaegt: " << reihe << endl;
cout << "Die Parallelschaltung betaegt: " << para << endl;
}trotzdem vielen dan an alle !
kann geschlossen werden