Ohmsches Gesetz in C-Programm?
-
Wir haben die Aufgabe bekommen, ein C-Programm zu erstellen (ich nutze onlinegdb.com), welches die korrekten Werte darstellt, wenn man es ausführt. Gegeben sind die Werte 33V und die Widerstände:
R1=blau gelb rot silber
R2=lila weiss orange gold
R3=rot rot rot silber
R4=grau weiss rot gold
R5=rot gruen braun silber
R6=gelb orange braun gold
R7=braun schwarz schwarz silber
R7=rot blau braun gold
Wir sollen einen C-Code schreiben, der die Ergebnisse anzeigt, wenn man auf "Run" klickt, aber ich habe keinen Plan, was ich für einen Code schreiben soll, weil ich mich mit C bzw. mit Programmiersprachen nicht auskenne und uns nicht erklärt worden ist, wie wir vorgehen sollen.
So schaut der Stromkreis aus:
-
@Infinity1337 sagte in Ohmsches Gesetz in C-Programm?:
Wir sollen einen C-Code schreiben, der die Ergebnisse anzeigt, wenn man auf "Run" klickt, aber ich habe keinen Plan, was ich für einen Code schreiben soll, weil ich mich mit C bzw. mit Programmiersprachen nicht auskenne und uns nicht erklärt worden ist, wie wir vorgehen sollen.
Wie? Was? Wirst du von einem sadistischen Entführer festgehalten, der mit dir Spielchen spielt? Ist das eine Art Dschungelcamp? Wo sonst wird von jemandem eine völlig artfremde Expertise verlangt?
Oder hast du einfach die letzten paar Semester geschlafen?
Das ist jedenfalls ein komplexes Programm, an dem auch ein erfahrener Entwickler mehrere Stunden schreiben wird (wenn man alles von grundauf selber macht), also ist das jemanden ohne Kenntnisse wohl kaum zu erklären. Zumal man auch noch Elektronikkenntnisse braucht, die ein typischer Programmierer sich erst einmal anlesen muss, was nochmal einige Stunden sind, besonders wenn man keine Vorkenntnisse hat. Von daher wird dir das wohl niemand rein aus Freundlichkeit oder Eigeninteresse einfach so machen.
Mit dieser Information: Wie stellst du dir vor, wie man dir am besten helfen kann? Hättest du denn wenigstens einen Plan, wie du die Aufgabe auf Papier lösen würdest?
PS: Die Widerstände haben ja auch noch unterschiedliche Toleranzen! Das impliziert wohl, man soll auch noch eine Fehlerfortpflanzung durchführen? Mach aus "mehreren Stunden" eher "viele Stunden", besonders was das Anlesen des Wissens angeht. Und du brauchst mindestens einen Programmierer, der mal eine naturwissenschaftliche Vorlesung an einer Hochschule besucht hat.
-
Es ist meine erste Ausbildungswoche (genau genommen bin ich noch in der Arbeitserprobung). Heute ist der dritte Tag und gestern haben wir damit erst angefangen. Keine Ahnung, was das soll. Wir sollen uns das selbst via Handbuch und/oder via Internet zusammenkramen und dann einen vernünftiges C-Programm schreiben. Ich hab davon keinen Plan. Wir sollen halt befehle wie "<float>" usw. verwenden. Für mich ist das wie gesagt alles Neuland und da mir keiner von den anderen Azubis so wirklich weiterhilft, dachte ich mir, ich frage hier nach.
Wie man die Rechnungen an sich durchführt, weiß ich schon, was ich als C-Code schreiben muss, weiß ich allerdings nicht.
-
@Infinity1337 Wie lange habt ihr Zeit dafür?
-
Ich verstehe nicht, an welchen Stellen im Stromkreis die Spannung gemessen/angegeben werden soll. Das geht aus der Skizze nicht hervor.
-
Wie viel Zeit hast du? C kann man eigentlich nicht mal eben mit Internettutorials lernen. Vielleicht, wenn man schon programmieren könnte, aber ohne Vorkenntnisse reden wir von Wochen und Monaten, bis du fit genug wärst. Du könntest natürlich schummeln und so etwas wie
printf("%f", von_dir_auf_papier_berechnetes_ergebnis)
schreiben. Aber für ein allgemeines Programm, das mit einer beliebigen Kombination von Reihen und Serien und beliebigen Widerständen zurecht kommt, brauchst du von 0 auf mindestens Wochen, wenn du dich richtig rein hängst. Ich selber würde das voraussichtlich nicht in weniger als 3 Stunden schaffen (wobei mich dabei eher hindern würde, dass C eher eine umständliche Sprache ist), und ich mache so etwas täglich seit Jahrzehnten, und ich habe bereits alle nötigen Elektronik- und Mathematikkenntnisse.Allgemein würde ich für "Lernen wie ein Programmierer zu denken" schon Wochen ansetzen, egal in welcher Sprache. Und C ist dann nochmal nicht gerade einsteigerfreundlich, braucht sehr viel Detailarbeit und straft jeden kleine Ungenauigkeit gnadenlos ab.
-
@Leon0402 Uns ist kein Zeitlimit gesetzt worden. Denke mal, dass wir genug Zeit dafür haben und ich glaube nicht, dass die Aufgabe allzu schwer ist, weil das ist mein 3. Ausbildungstag und ich hab mich noch nie mit C auseinandergesetzt. Wäre ich schon erfahrener damit und hätte schon mehrere Semester hinter mir, könnte ich verstehen, dass der Thread eher unangebracht ist, aber für mich ist das alles Neuland und uns ist nichts erklärt worden.
-
Das Ding ist halt, dass ich Späteinsteiger in der Ausbildung bin, habe 3 Wochen verpasst. Kann sein, dass die das da bereits gemacht haben, ich aber halt nicht.
-
@Infinity1337 sagte in Ohmsches Gesetz in C-Programm?:
Das Ding ist halt, dass ich Späteinsteiger in der Ausbildung bin, habe 3 Wochen verpasst. Kann sein, dass die das da bereits gemacht haben, ich aber halt nicht.
Ja, klingt so. Nach 3 Wochen C-Kurs wäre das eine ziemlich anspruchsvolle, aber zumindest realistische Hausarbeit. Das löst natürlich dein Problem nicht, denn das bedeutet ja nur, dass du 3 Wochen nachholen musst, und das wird sich kaum abkürzen lassen.
Ich könnte mir vorstellen, später am Tage ein entsprechendes Programm in Python zu verfassen (weil mich C zu sehr nerven würde), dann hättest du wenigstens einige Ideen, wie man so etwas angeht und welche Komponenten da reingehen. Zumindest für die High-Level-Struktur. Das ganze Low-Level-Zeug, das einen Python abnimmt, müsstest du dann auch noch für C lernen. Python ist auch lesbar genug, dass man das (mit Anstrengung) auch als nicht-Programmierer verstehen kann.
-
@SeppJ Wenn ich den Code vor mir sehe, kann ich mir schon vorstellen, dass ich daraus lernen kann und verstehen kann, wieso er so geschrieben worden ist, aber momentan stehe ich auf dem Schlauch und sitze meine Zeit hier ab, weil ich einfach nicht weiterweiß.
-
@Infinity1337 sagte in Ohmsches Gesetz in C-Programm?:
@SeppJ Wenn ich den Code vor mir sehe, kann ich mir schon vorstellen, dass ich daraus lernen kann und verstehen kann, wieso er so geschrieben worden ist, aber momentan stehe ich auf dem Schlauch und sitze meine Zeit hier ab, weil ich einfach nicht weiterweiß.
Das wäre der Plan (und ich würde es auch selber interessant finden). Aber jetzt habe ich erst einmal keine Zeit dafür.
-
@SeppJ sagte in Ohmsches Gesetz in C-Programm?:
@Infinity1337 sagte in Ohmsches Gesetz in C-Programm?:
@SeppJ Wenn ich den Code vor mir sehe, kann ich mir schon vorstellen, dass ich daraus lernen kann und verstehen kann, wieso er so geschrieben worden ist, aber momentan stehe ich auf dem Schlauch und sitze meine Zeit hier ab, weil ich einfach nicht weiterweiß.
Das wäre der Plan (und ich würde es auch selber interessant finden). Aber jetzt habe ich erst einmal keine Zeit dafür.
Ja, gar kein Ding. Mach dich da nur ran, wenn du willst und wenn du Zeit hast. Ich recherchiere für mich selbst noch weiter, allerdings weiß ich nicht, ob ich wirklich weiterkomme.
-
Du solltest erst einmal deinen Ausbilder bzw. andere Azubis fragen, was in den ersten 3 Wochen gelehrt wurde, damit du das nachholen kannst.
Wenn dort kein konkretes C Tutorial oder Buch benutzt wurde, dann solltest du selber eines durcharbeiten.
Online gefunden habe ich z.B. C-HowTo: Tutorial Start, welches keine Programmiererfahrung vorauszusetzen scheint.
Weitere sind WikiBooks: C-Programmierung und (in englisch) tutorialspoint: C Tutorial, so daß du selber entscheiden kannst, welches dir mehr zusagt (bzw. wenn du bei einem etwas nicht verstehst, dann bei einem anderen nachlesen kannst).Und du solltest dir auch eine lokale Entwicklungsumgebung (IDE) installieren.
Ohne selber einige Testprogramme geschrieben zu haben, wirst du kaum diese Aufgabe komplett lösen können.
-
@Infinity1337 sagte in Ohmsches Gesetz in C-Programm?:
Ja, gar kein Ding. Mach dich da nur ran, wenn du willst und wenn du Zeit hast. Ich recherchiere für mich selbst noch weiter, allerdings weiß ich nicht, ob ich wirklich weiterkomme.
Der erste Schritt ist die Berechnung in eine Abfolge von formalen Schritten aufzuschreiben (Pseudo-Code) – ganz ähnlich wie ein Rezept zum Kuchenbacken. Das sollte so simpel sein, dass jemand der davon keine Ahnung hat es trotzdem korrekt ausrechnen kann. Was muss jemand der von der Materie keinerlei Ahnung hat tun, damit er die nach Aufgabenstellung korrekten Ergebnisse bekommt? (Einfach in simplen deutschen Sätzen beschreiben.)
- ...
- ...
-
@john-0 sagte in Ohmsches Gesetz in C-Programm?:
@Infinity1337 sagte in Ohmsches Gesetz in C-Programm?:
Ja, gar kein Ding. Mach dich da nur ran, wenn du willst und wenn du Zeit hast. Ich recherchiere für mich selbst noch weiter, allerdings weiß ich nicht, ob ich wirklich weiterkomme.
Der erste Schritt ist die Berechnung in eine Abfolge von formalen Schritten aufzuschreiben (Pseudo-Code) – ganz ähnlich wie ein Rezept zum Kuchenbacken. Das sollte so simpel sein, dass jemand der davon keine Ahnung hat es trotzdem korrekt ausrechnen kann. Was muss jemand der von der Materie keinerlei Ahnung hat tun, damit er die nach Aufgabenstellung korrekten Ergebnisse bekommt? (Einfach in simplen deutschen Sätzen beschreiben.)
- ...
- ...
Das ist aber eine ganz schön schwierige Forderung an jemanden ohne Programmierkenntnisse, so eine Liste zu erstellen, die dann auch sinnvoll in ein Programm umzusetzen ist. Zumal eine für die Programmierung taugliche Liste typischerweise keine Schritt-für-Schritt-Liste sein wird, sondern Schleifen, Bedingungen und ähnliches enthalten wird, wo man als Nicht-Programmierer gar nicht gewohnt ist so zu denken. Darum ist das ja gerade so schwierig, wenn man als Programmierer einem Nicht-Programmierer irgendwie eine brauchbare Erklärung abnehmen muss, was der überhaupt von einem will.
Gerade hier ist das ja sogar ein rekursives Problem. Das kannst du als Programmierer jemandem ohne Vorkenntnisse kaum erklären; unmöglich dies umgekehrt in einer Problemdefinition zu erwarten!
-
@Infinity1337
Mal eine Bitte: Stell doch mal bitte die komplette Aufgabe hier rein.
-
@SeppJ sagte in Ohmsches Gesetz in C-Programm?:
Aber für ein allgemeines Programm, das mit einer beliebigen Kombination von Reihen und Serien und beliebigen Widerständen zurecht kommt
Ist das denn die Aufgabe? Es sind doch konkrete Widerstände und ein konkreter Schaltplan gegeben. Oder übersehe ich etwas?
=> Der Plan https://ibb.co/J7cCTH7
=> Und im Thread ist angeben, welcher Wiederstand welche Farbringe hat (=> Mit meinem Halbwissen glaube ich das sich daraus doch direkt die Widerstände berechnen / online nachlesen lassen)Dann ist noch ne Eingangsspannung gegeben. Ich schätze mal, man soll jetzt irgendwie die Stromstärke oder so ausgeben? Dazu also dann die entsprechenden Formeln mit Reihe & Serie nachschlagen und in Code mit den konkreten Werten / Aufbau der Schaltung geben.
Mit Sicherheit keine leichte Einstiegsaufgabe, wenn man so gar keine Ahnung von nix hat. Aber ich sehe noch nicht ganz die Komplexität, die dich 3h kosten würde.
-
@Leon0402 sagte in Ohmsches Gesetz in C-Programm?:
@SeppJ sagte in Ohmsches Gesetz in C-Programm?:
Aber für ein allgemeines Programm, das mit einer beliebigen Kombination von Reihen und Serien und beliebigen Widerständen zurecht kommt
Ist das denn die Aufgabe? Es sind doch konkrete Widerstände und ein konkreter Schaltplan gegeben. Oder übersehe ich etwas?
Das ist halt impliziert, wenn man kein Klugscheißer sein möchte, der ein Programm
printf("%f", auf_papier_berechnetes_ergebnis)
schreiben möchte, sondern vielleicht wirklich dem Geiste der Aufgabe folgen will, weil man etwas lernen möchte. Wenn ich der Ausbilder wäre und mir jemand weniger als ein allgemeintaugliches Programm zu so einer Aufgabe abliefert, würde ich das als Verfehlen des Ausbildungsziels ansehen. Und mir irgendeine ironische Disziplinarmaßnahme ausdenken, wie "schreibe 100 Programme dieser Art zu jeweils leicht unterschiedlichen Schaltplänen"
-
@SeppJ sagte in Ohmsches Gesetz in C-Programm?:
@Leon0402 sagte in Ohmsches Gesetz in C-Programm?:
@SeppJ sagte in Ohmsches Gesetz in C-Programm?:
Aber für ein allgemeines Programm, das mit einer beliebigen Kombination von Reihen und Serien und beliebigen Widerständen zurecht kommt
Ist das denn die Aufgabe? Es sind doch konkrete Widerstände und ein konkreter Schaltplan gegeben. Oder übersehe ich etwas?
Das ist halt impliziert, wenn man kein Klugscheißer sein möchte, der ein Programm
printf("%f", auf_papier_berechnetes_ergebnis)
schreiben möchte, sondern vielleicht wirklich dem Geiste der Aufgabe folgen will, weil man etwas lernen möchte.Verstehe ich nicht so ganz. Es gibt vier Varianten:
- Für einen konkreten Schaltplan, konkrete Ergebnisse auf Papier von Hand berechnen
- Für einen konkreten Schaltplan und konkrete Widerstandswerte, den Computer die Ergebnisse berechnen lassen
- Für einen konkreten Schaltplan und beliebige Widerstandswerte (per Eingabe), den Computer die Ergebnisse berechnen lassen
- Für einen beliebigen Schaltplan und beliebige Widerstandswerte (per Eingabe), die Ergebnisse automatisiert berechnen lassen
Offensichtlich ist 1 nicht Sinn der Aufgabe. Aber ich sehe das Problem nicht mit Aufgabe 2. Das ist doch völlig üblich für Anfängeraufgaben, dass man nicht generische Probleme löst. Also sprich sowas wie mathematische Formeln in Code umzuwandeln. Da können alle Werte auch hardgecoded werden und diese Formeln sehr ungenerisch sein. Mit Stufe 3 wird das ganze ein ticken anspruchsvoller und schon fast eine nützliche Applikation. Aufgabe 4 ist natürlich eine sehr nützliche Applikation, aber mit Sicherheit eben keine absolute Anfängeraufgabe.
Wie die Aufgabe konkret lautet, wird nur der Thread Ersteller und sagen können. Aber wie du darauf kommst, dass ausgerechnet Aufgabentyp 4 verlangt ist, obwohl doch explizit ein Schaltplan und explizit Widerstandswerte gegeben sind, erschließt sich mir überhaupt nicht. Auch den Satz "Beispielhaft könnte das so aussehen ...." habe ich nirgendswo gelesen, im Gegenteil.
Edit: Und vlt. ist dann Aufgabe 3 oder 4 eine entsprechende Folgeaufgabe
-
Meinst du mit Stufe 2 so etwas wie
int blue = 6, yellow = 4, red = 2; // Ich tippe jetzt nicht alle Farben ein float r1 = (blue*10 + yellow) * pow(10, red); [...] float r9 = r5 + r6 + r7 + r8; [...] float r_gesamt = r9 + [ich rechne das jetzt nicht alles durch]; printf("Ergebnis %f", r_gesamt);
Also den Computer wie einen Taschenrechner nutzen? Das kann doch unmöglich das Ausbildungsziel sein. Wieso sollte man das programmieren und eben keinen Taschenrechner nutzen? Das ist doch quasi das gleiche, wie auf Papier rechnen, bloß dass man es in C aufschreibt.
Es wäre natürlich etwas, das man ohne Vorkenntnisse tatsächlich nach 5 Minuten Lernen schaffen könnte. Da bräuchte der Threadersteller dann wohl auch keine Hilfe. Würde zu der Aussage passen, dass sich die Auszubildenen angeblich das einfach zusammengoogeln sollen. Hat mit C aber halt nix zu tun, und könnte jeder grafische Taschenrechner einfacher und besser.