C N Widerstände parallel/reihe berechnen

Emina

Newbie
Registriert
Dez. 2017
Beiträge
5
Hallo allerdeits,

ich bin dabei mir eine kleine konstruktion für meine arbeit zu entwerfen. Um mir die arbeit zu erleichtern, möchte ich mir ein kleines programm schreiben um beliebig viele widerstände zu berechnen.
Da ich erst mit dem programmieren angefangen bin, stoße ich schnell auf grenzen.

Mein Ziel ist es, beliebig viele Widerstände ausrechnen. Ich weiß, wie man beispielsweise zwei Widerstände parallel und in Reihe berechnet. Also mit der genauen Anzahl an Widerständen. Bei N Widerstände, hatte ich überlegt mit einem Array zu arbeiten. Aber ich weiß nicht, wie das Programm alle Widerstände einliest und dann auch als Formel zu einem Gesamtwiderstand berechnet..
 
Dann zeig doch schon mal den Code, den du bereits hast. Damit wir wissen wo du stehst, auf welchem Level du bist und was wir dir zutrauen können.

Es gibt im Netz auch massenweise Tools, die dir solche Berechnungen durchführen. Aber du bist ja hier um Fortschritte beim Programmieren zu machen ;)

C ist zwar eine nette Sprache. Aber der Einstieg und die ersten Erfolge wären mit Java oder Python sicherlich einfacher. Aber da du ja scheinbar schon alles für C bereit hast, so soll es C sein! :)
 
Hallo!
Du musst dir überlegen, ob du die Widerstände als vorformatierte Datei einlesen willst, im Programm selbst oder direkt mit dem Programm Aufruf. Falls möglich auch direkt die Anzahl der Widerstände mit angeben lassen, so lässt sich das Array direkt korrekt deklarieren & initalisieren. Mit einer Abfrage im Programm selbst kannst du ja den User abfragen ob die Widerstände in Reihe oder parallel berechnet werden sollen.
Hoffe das hilft für den Anfang!
 
Wenn es um wirklich viele Wiederstände geht kann ich dir noch meine EX 2 Aufgaben geben mit Lösung, lässt sich auch per hand mach ^^
Bei N wiederständen erreichst du schnell eine Grenze das ist kein Problem, das hilft zumindest bei der Performance ;).
IMG_20171205_235808035_HDR.jpgIMG_20171205_235822038_HDR.jpg
 
das klingt jetzt doch etwas anspruchsvoller.
Du musst die Widerstädne abspeichern, und die Kanten (Verbindungen zwischen den Widerständen).
Dann kannst du die nicht zwangsläufig in Reihe oder parallel schalten, weil vorher eine Stern/Dreieck oder Dreieck/Stern Trafo Notwendig ist.
Oder du löst es über Knotenpotentiale. Für N Knoten ergibt sich dann eine NxN Matrix, die gelöst werden will.
Wenn du dafür nicht gerade selbst Gauß/Housholder/Givens Lösungsalgorithmen schreiben willst, musst du wohl ne Bibliothek nehmen.
Für die Berechnung von Widerstandsnetzen gibt es Simulationssoftware und analytische Löser. Das ist nicht so einfach, wie du es dir vorstellst
 
Datenstruktur Idee:

Du hast ganz oben deine Wurzel-Knoten, von der aus geht es los, 3 Werte hat ein Knoten:
- string: parallel oder reihe (mit was es verknüpft ist)
- float: Ohm
- array: mit zeiger zu parallelen/m widerstand/änden, oder ein zeiger zu nächstem widerstand in reihe oder nichts, wenn am ende/masse

dafür kannst dir dann schön berechnen lassen was für ein widerstand deine widerstandsschaltung haben soll, denke ich.



dieses knotenpotentiale, matrix und lösen, das ist wie programme das machen, falls ich mich richtig entsinne, weiß nicht ob ich das nehmen würde für deinen Fall. Bei dir gibt es ja nur Widerstände die parallel oder in reihe sind und dann gesamt widerstand berechnen, ne?
 
Zuletzt bearbeitet:
Ja man gibt so viele Widerstände ein, wie man möchte und bekommt dann den Gesamtwiderstand heraus
 
Ich weis leider nicht so recht was du dir vorstellst und wie du dir deine Arbeit damit erleichtern willst. Einfache Dinge gebe ich persönlich einfach in den Taschenrechner ein und kompliziertere in LTspice.

Wenn du etwas üben willst und Spaß an dem Projekt hast, kannst du ja vielleicht mal deinen Code posten und genau definieren was dein Problem ist. Ansonsten könntest du dir auch ein Simulationsprogramm wie LTspice einfach mal etwas genauer anschauen.
 
Ja also die Abfrage nach Anzahl ist drin. Dann habe ich für zwei Widerstände mit if weitergearbeiter. Also für if( Schaltung=R)
{
Rges=R1+R2
 
Also einfacher hättest du es mit einer Objektorientierten Programmiersprache, die von Haus aus Vektoren unterstützt. Im Rahmen meines Bacherlorstudiums lerne ich gerade C++ und die Grundlagen für ein solches Programm wurden in ca. 8 Std Vorlesungszeit vermittelt. Wenn du Klassen verwenden willst, steigt der Lernaufwand auf ca. 16 Std., aber auch die Flexibilität. Vektoren ersparen dir das manuelle Verwalten von Speicher, wie es bei Arrays der Fall ist und helfen dir dadurch auch, Programmierfehler zu vermeiden. Klassen könnten dir den Umgang mit den gesammelten Datensätzen vereinheitlichen und vereinfachen.

Dieses Standardwerk kann ich dir wärmstens empfehlen:

Bjarne Stroustrup: Programming Principles and Practice Using C++

Alternativ würden sich auch die Sprachen C# und Java sehr gut für ein solches Unterfangen anbieten, und Sie würden dir erlauben, auf deine Grundkenntnisse in C aufzubauen, da die Syntax ähnlich ist.
 
Ich schicke euch gleich mal das was ich bereits für zwei habe. Das möchte ich jetzt umwandeln in N Widerstände. Oder zumindest so ändern, dass ich aus einem Netzwerk mit parallel und in Reihe geschalteten Widerständen den Gesamtwiderstabd ermitteln kann.
Ergänzung ()

int main(void) {
int R1=0;
int R2=0;
float Rges=0.0;
char Schaltung='R';
int N=2;

setbuf(stdout, NULL);
printf ("Bitte Art der Schaltung eingeben: Reihe: R, Parallel: P: ");
scanf ("%c", &Schaltung);
printf ("Bitte Zahl der Widerstände eingeben:");
scanf ("%i", &N);
printf ("Widerstand 1: ");
scanf ("%i", &R1);
printf ("Widerstand 2: ");
scanf ("%i",&R2);
if (Schaltung=='R'||Schaltung=='r')
{
Rges=R1+R2;
printf ("Rges=%f", Rges);
}
else if ( Schaltung=='P'||Schaltung=='p')
{
Rges=(R1*R2)/ (R1+R2);
printf ("Rges=%f",Rges);
}
else
{
printf ("unbekannte Schaltung");
}
return EXIT_SUCCESS;
}
 
Also entweder habe ich die Aufgabe noch nicht verstanden, oder ihr denkt alle viel zu kompliziert.

Es ist doch eine Reihenschaltung aus N Widerständen ODER eine Parallelschaltung aus N Widerständen zu berechnen, oder nicht?

Dann kann man da relativ simpel mit einer for-Schleife durch iterieren. Für N parallel geschaltete Widerstände muss man z. B. (N-1)-mal die Formel für die Parallelschaltung durchrechnen. Für N=3 eben zuerst R1//R2=R12 und das Ergebnis davon (R12) dann weiterverwenden und nochmal R12//R3 rechnen.

Wenn man eine beliebige Schaltung aus Parallel- und Reihenschaltungen berechnen will, muss man sich zunächst mal einen Formalismus überlegen, wie man diese Schaltung darstellt und dann eben mit numerischen Methoden lösen. Aber so etwas selbst zu programmieren wäre vielleicht etwas Overkill. Es geht ja scheinbar um Arbeitserleichterung und nicht um den Lerneffekt.

Für so etwas gibt es Schaltungssimulatoren, z. B. ltSPICE.
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben