Widerstandsberechnung {war: Ich bin so schlecht :(}
-
hallo leute, ich hab ein gaaanz großes problem, ich soll zu morgen folgende aufgabe lösen und hab nichtmal ansatzweise ne ahnung wie...

1 Schreiben Sie ein Programm resistors1.cpp, welches folgenden Bedingungen genügt:
1.1 In einer do..while Schleife sollen solange Widerstandswerte R1, R2 usw. (Einheit beliebig)
eingelesen werden, bis als Wert eine 0. eingegeben wird;1.2 Der resultierende Gesamtwiderstand soll sowohl für Reihenschaltung als auch für Parallelschaltung
berechnet und ausgegeben werden.1.3 Negative Werte sollen ignoriert werden und wenn aufgetreten bzw. eingegeben, soll mit dem (End-)
Ergebnis ein entsprechender Hinweis (→ "... wurden ignoriert") ausgegeben werden.
Alternativ (besser) ist bei Eingabe eines negativen Wertes die Aufforderung zur erneuten Eingabe
(eines positiven Wertes) möglich.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
(Erinnerung: Ausdrücke wie 1/R sind links vom Zuweisungssymbol nicht erlaubt.)
Achtung: Die Division durch Null ist undefiniert bzw. verboten !kann mir da vll wer helfen... ist die 4. info vorlesung also allzuschwer kann es eig nich sein, nur steh ich da grad echt im wald

-
um ne Lsg zu bekommen muss man idR mehr machen als nen Mädchen-Name als Nick zu nehmen

das mit dem sternchen dazu war ja schon ne gute idee, aber ich bezweifel ja, dass sie was bringt...also, selbst was machen, ansatz zeigen und dann hoffen, dass jmd genug lange weile hat, um dir zu helfen...
bb
PS: "ein Programm resistors1.cpp" - die formulierung ist zumindest schon mal ein wenig lächerlich : D
habs mir doch anders überlegt - wer kann schon ner frau widerstehen ;o)
do..while schleife
die sieht schon mal so aus:
do { }while(R != 0);na dann zeig mal, was du jz noch machen würdest...
-
Voila, die eingabe. Der Rest ist leicht.
void lies_die_eingabe (std::vector<double>& input) { double cur = 0.0; do { std::cout << "Wert eingeben\n"; std::cin >> cur; if (cur > 0.0) input.push_back (cur); else if (cur < 0.0) std::cout << "\nWiederholen sie die Eingabe.\n\n"; } while (cur != 0.0); } }
-
soso, bis morgen, ganz toll. die aufgabe hast du auch erst heute nachmittag bekommen, wa.
-
@Kontrasubjekt
Dir scheint noch nicht klar zu sein, dass wir hier keine kompletten Lösungen posten. Wenn da eine Regelmäßigkeit reinkommt, gibt's hier nur noch Threads mit "mach mal hier" und "mach mal da".
-
also erstmal zur info, ich bin sehr wohl ein mädchen
und nicht mal die einzige in meinem studiengang informatik 
ich hab das so ->
include <iostream> using namespace std; int main(void) { int n,sum,sum2; cout << "Widerstandsberechnung"; sum = 0; sum2 = 0; do{ cout << "\nGeben Sie Zahlen > 0 ein, sonst ist Eingabe beendet."; cin >> n; sum = sum + n; sum2 = sum2 + (1/n); }while (n>0); cout << "Summe ist: " << sum << endl; cout << "Summe ist: " << sum2 << endl; return 0; }allerdings ist da irgendwas bei der 2. berechnung falsch
und kommazahlen gibt er auch nciht aus
-
Kontrasubjekt schrieb:
void lies_die_eingabe (std::vector<double>& input) { ..... von vector<> stand da nichts in der Aufgabenstellung.
Wie wäre es denn mit einem abgefahrenen Ansatz:
#include <iostream> #include <iterator> #include <numeric> struct R { R() : m_r(0.0), m_l(0.0) {} R& operator+=( const R& b ) { m_r += b.m_r; m_l += b.m_l; return *this; } friend std::istream& operator>>( std::istream& in, R& r ) { double x; for( ; (in >> x).fail() || x < 0.0; in.clear(), in.ignore( 999, '\n' ) ) if( in ) std::cout << "Wert '" << x << "' ungueltig - wird ignoriert" << std::endl; if( x > 0.0 ) { r.m_r = x; r.m_l = 1/x; } else in.setstate( std::ios_base::failbit ); return in; } friend std::ostream& operator<<( std::ostream& out, const R& r ) { out << "Widerstand der Reihenschaltung: " << r.m_r; if( r.m_l > 0 ) out << "\nWiderstand der Parallelschaltung: " << 1/r.m_l; return out; } private: double m_r, m_l; }; R operator+( R r1, const R& r2 ) { return r1 += r2; } int main() { using namespace std; do { cout << accumulate( istream_iterator< R >( cin ), istream_iterator< R >(), R() ) << endl; } while( true ); return 0; }Gruß
Werner
-
@Werner Salomon:
Wie gerne wir alle deine Ansätze habe, denke ich, dass ihr das nicht viel bringen wird..
@Janina_Sternchen:
Klar werden da keine Kommazahlen ausgegeben.. Du hast ja schliesslich keine.
Du benutzt da int's und keine float's..
-
Kóyaánasqatsi schrieb:
@Kontrasubjekt
Dir scheint noch nicht klar zu sein, dass wir hier keine kompletten Lösungen posten. Wenn da eine Regelmäßigkeit reinkommt, gibt's hier nur noch Threads mit "mach mal hier" und "mach mal da".Wenn ich gerade mag, dann poste ich gerne eine Teillösung.
-
Kontrasubjekt schrieb:
void lies_die_eingabe (std::vector<double>& input) { double cur = 0.0; do { std::cout << "Wert eingeben\n"; std::cin >> cur; if (cur > 0.0) input.push_back (cur); else if (cur < 0.0) std::cout << "\nWiederholen sie die Eingabe.\n\n"; } while (cur != 0.0); }4. vorlesung... werden sie wohl mit mit einfachen mitteln machen müssen^^
und ich wüsste auch nicht, wozu hier alle werte gespeichert werden sollten@janina:
wollt ich ja auch gar nich bestreiten ;P
so sieht das doch schon besser aus (so mit eigenem ansatz und so^^)...
wenn du stattint n,sum,sum2;float n,sum,sum2;schreibst, sollte es gehen^^
sum2 = sum2 + (1/n);rate mal, was hier passiert, wenn man 0 eingibt ;o)
wirst du also irgendwie abfangen müssen...Alternativ (besser) ist bei Eingabe eines negativen Wertes die Aufforderung zur erneuten Eingabe (eines positiven Wertes) möglich
pseudocode:
do eingabe(x) wenn x > 0 sum += ... sum2 += ... wenn x < 0 ausgabe("wird ignoriert") while(x != 0)bb
-
Janina_Sternchen schrieb:
ich hab das so ->
Das ist doch schon sehr gut - Nein Kommazahlen hast Du keine - warum nicht, hat drakon schon gesagt.
Die zweite Berechnung ist fast richtig - nur gibst Du am Ende den Leitwert aus und nicht den Widerstand.Noch 'ne Empfehlung: erweitere den Code in Zeile 16 zu
}while ( cin && n>0);Gruß
Werner
-
irgendwie "bahnhoft" ihr mich grad ganz dolle

-
hallo ich sitze wegen meines umzugs auch erst seit ner stunde dran und habe die aufgabe 1.1 schon gelöst nur nun habe ich probleme mit 1.2 und 1.3 versteh auch nicht mehr so viel
wäre top wenn ihr es für ein laien erklären könntet 
-
wie hast du die erste denn gelöst?
*liebguck*
-
Janina_Sternchen schrieb:
irgendwie "bahnhoft" ihr mich grad ganz dolle

Falls Du konkret fragen würdest, so könnten wir Dir auch konkret helfen.
-
wer könnte mir denn helfen? dem würde ich dann auch das als pm schicken mit meiner icq nummer oder so damit man vllt schneller zur lösung kommt

-
schick mal deine icq nummer ich mach dir für 10 euro paysafe card deine hausaufgaben
-
boar... poste einfach, was du hast und was noch fehlt und wo dein problem dabei liegt... wenn du dir das stück pseudocode durchliest, was ich gepostet habe, dann solltest du die aufgabe doch scho komplett geschafft haben...
bb
-
also es funktioniert nun garnichtsmehr irgendwie
ich hoffe ihr seht aber was ich will:include <iostream> using namespace std; int main(void) { double n = 0.0 int n,sum,sum2; cout << "Widerstandsberechnung"; sum = 0; sum2 = 0; do{ cout << "\nGeben Sie Zahlen > 0 ein, sonst ist Eingabe beendet."; cin >> n; sum = sum + n; if(n>=0) { if(n>0) { sum2 = sum2 + (1/n); } else } else cout << "bitte eine positive zahl eingeben" }while (n>0); cout << "Summe ist: " << sum << endl; cout << "Summe ist: " << sum2 << endl; return 0; }
-
vorab: "funktioniert nicht" ist keine gute fehlermeldung ;P
Janina_Sternchen schrieb:
include <iostream> using namespace std; int main(void) { double n = 0.0 //; fehlt int n,sum,sum2; //du solltest für alles den gleichen typenem nehmen - außerdem ist n als variablenname schon vergeben (und einmal sollte ja auch reichen^^). des weiteren ist "n" auch kein wirklich guter bezeichner... cout << "Widerstandsberechnung"; sum = 0; sum2 = 0; do{ cout << "\nGeben Sie Zahlen > 0 ein, sonst ist Eingabe beendet."; cin >> n; sum = sum + n; //das stand im if-zweig bei mir if(n>=0) //wo stand denn bitte >= bei mir? { if(n>0) { sum2 = sum2 + (1/n); } else } else cout << "bitte eine positive zahl eingeben" }while (n>0); //das hier ist doch auch anders, als ich es dir gesagt hatte... cout << "Summe ist: " << sum << endl; cout << "Summe ist: " << sum2 << endl; //hier gibst du doch noch immer L aus und nicht R (=1/L) return 0; }bb