Weil es mir jetzt einfach keine Ruhe läßt. Es geht darum, dass ein Lehrling, 2 Lehrjahr, Ausbildungsberuf Physiklaborant in der Berufsschule die Aufgabenstellung hatten, mittels Arduino ein Lauflichprogramm zu erstellen. Die originale Aufgabenstellung habe ich gerade nicht parat, aber sie mußten Arduino dafür verwenden, dürfen (weil wohl nicht besprochen wurde) keine Interrupts verwenen und die LEDs sind über ein Schieberegistermodul angeschlossen, für das sie eine Beschreibung erhalten hatten und vorgestellt wurde, wie dem Schieberegister Werte zugewiesen werden. Jetzt ist mein Lehrling - aus meiner Sicht der Dinge - (weit) über dem, was ein 18-jähriger im 2. Lehrjahr können muß, er interessiert sich hier sehr stark für Arduino und auch grundsätzlich Mikrocontroller. Grundsätzlich erkennt man von seiner Art und Weise schon auch meine Handschrift in der Programmierung wie ich ihm manche Dinge gezeigt habe, bspw. das Zerlegen in kleine Funktionen und insbesondere auch das Kommentieren des Codes. Das Lauflicht sollte über einen Trimmer in der Ablaufgeschwindigkeit geändert werden können und über einen 2 pol. Dipschalter 4 verschiede Auswahlmuster wählbar sein. Im Anhang könnt ihr sehen, was er in der Schule abgeliefert hat und ganz ehrlich hat es mich "beeindruckt", wie er as gelöst hat (ich bin ganz sicherich nicht mehr von einem LED-Laulicht beeindruckt). Grundsätzlich hat er etwas gemacht, von dem er wahrscheinlich die Fachbegriffe gar nicht kennt. Aus meiner Sicht der Dinge hat er so etwas wie ein "event-pollinggetriebenes" Programm geschrieben, das aus Sicht der I/O Devices (Trimmer, DIP-Schalter, LED) noch nicht einmal blockierend ist. Änderungen am Trimmer oder eine Änderung an den DIP-Schaltern erzeugen relativ unmittelbar Änderungen im Programmablauf. Ich habe viele Lauflichtprogramme von Lehrlingen gesehen, aber das hier ist mit Abstand das beste (für mich). Mich würde jetzt echt interessieren, welche Note aus einer "Lehrersichtweise" hier angemessen ist? PS: natürlich werden jetzt wieder die ewigen Nörgler und Trolle aufschlagen, aber auf eine neutrale, sachliche Aussage freue ich mich!
Ralph S. schrieb: > Mich würde jetzt echt interessieren, welche Note aus einer > "Lehrersichtweise" hier angemessen ist? Die kommt auf die Aufgabenstellung, den Lehrstoff und die Erwartung des Dozenten an. Wenn die Erwartung (aka "Musterlösung") ge- oder übertroffen wurde, sollte es eine 1 geben. Ralph S. schrieb: > Physiklaborant Erfordert der schon eine (Fach-) Hochschulreife? Von den meisten meiner Mitschülern meine Berufschulklasse hätte ich man sowas nicht bekommen. Die Quellcode-Formatierung (inkl. Kommentare) finde ich vorbildlich, nachdem ich schon von Quellcode von E-Technik-Mastern pflegen durfte, die an sowas gar kein Interesse hatten.
1 | sr.setvalue(laufl_prog[i + 1], 1); // Ausgabe eines Leuchtmusters |
Warum i+1? Denn so wird das erste Element (mit Index 0) nie angesprochen und die Array-Grenze überschritten. Oder sehe ich da was falsch?
Stefan S. schrieb: > Warum i+1? Denn so wird das erste Element (mit Index 0) nie angesprochen > und die Array-Grenze überschritten. Oder sehe ich da was falsch?
1 | len = laufl_prog[0]; |
übersehen? Da mit Pointern auf (unterschiedlich lange) Arrays gearbeitet wird, braucht man die Längeninformation explizit.
Stefan S. schrieb: > Denn so wird das erste Element (mit Index 0) nie angesprochen Dort wird die Länge herausgeholt:
1 | len = laufl_prog[0]; |
> die Array-Grenze überschritten. Nein, weil das Pascal-String-mäßig ja explizit über diesen Längeneintrag an Index 0 abgehandelt wird. Ralph S. schrieb: > Ich habe viele Lauflichtprogramme von Lehrlingen gesehen, aber das hier > ist mit Abstand das beste (für mich). Sieht gut aus. Es wurden einige Gimmicks verwendet, die durchaus als "fortgeschritten" eingestuft werden können. Allerdings muss der Schreiber noch die "Potenz" aus dem Potentiometer raushalten ;-) - https://de.wikipedia.org/wiki/Potentiometer
:
Bearbeitet durch Moderator
Ahhhh Danke für die Korrektur! Rahul D. schrieb: > Stefan S. schrieb: >> Warum i+1? Denn so wird das erste Element (mit Index 0) nie angesprochen >> und die Array-Grenze überschritten. Oder sehe ich da was falsch? > len = laufl_prog[0]; > übersehen? Tatsächlich übersehen! Danke!
Rahul D. schrieb: > Ralph S. schrieb: >> Physiklaborant > Erfordert der schon eine (Fach-) Hochschulreife? erfordert "nur Realschulabschluß, obwohl dort einige Abiturienten und Fachhochschulreife Auszubildende dabei sind. Lothar M. schrieb: > Allerdings muss der Schreiber noch die "Potenz" aus dem Potentiometer > raushalten ;-) > - https://de.wikipedia.org/wiki/Potentiometer Dass man "Potentiometer" jetzt mit "z" schreibt.... tut nicht nur dir weh. Diese Schularbeit wurde - mir komplett unverständlich - mit einer 3,2 bewertet und ich bin am Überlegen, ob ich da beim Lehrer "vorstellig" werden sollte. Auch um dem Auszubildenden zu zeigen, dass ich nicht hinter der Lehrerentscheidung stehe. Nach meinen Kriterien hätte ich 1,5 gegeben ... auch wegen "Flüchtigkeitsfehler" in den Kommentaren:
1 | ADC / 3 = 341; 341 + maxspeed (40) = 381 |
2 | |
3 | Rueckgabewerte je nach Potenziometereinstellung 0..381 |
denn es hat eine Spannweite von 40..381, zudem ein Fehler eines Funktionsprototypen:
1 | uint8_t io_init(void) |
2 | {
|
3 | pinMode(dipkey_0, INPUT_PULLUP); |
4 | pinMode(dipkey_1, INPUT_PULLUP); |
5 | pinMode(speedctrl, INPUT); |
6 | } |
Das hätte "void io_init(void)" heißen müssen...
Lothar M. schrieb: > Mich würde jetzt echt interessieren, welche Note aus einer > "Lehrersichtweise" hier angemessen ist? Wie schon andere gesagt haben: Es kommt darauf an, was GENAU die Aufgabe war und was gekonnt werden hätte sollen. Das ist also ein subjektiver Maßstab, den können wir hier mangels Wissen nicht anlegen. Rein objektiv wäre es für einen "richtigen" Programmierer Schulnote 4 minus - vorausgesetzt, es läuft wenigstens richtig, was ich bezweifle. Allerdings muss so ein Azubi nicht das können, was ein richtiger Programmierer kann. Anders gesagt: Relativ gesehen mag dieser Azubi gut sein, absolut gesehen ist er es nicht. Nur ein paar Punkte: Insbesondere die Routine polled_delay() ist misslungen: Es werden dort zwei Dinge vermischt, und zwar so unübersichtlich, dass man nicht leicht erkennen kann, was da bewirkt wird. Der zweifache Aufruf von dipkey_get() (einer sichtbar in loop, einer unsichtbar in loop) macht das dann noch schlimmer. Mag sein, dass es mit diesem und anderen Tricks funktioniert, aber gut im Sinne einer sauberen Programmierung ist das nicht. Es sind "schmutzige" Tricks. Das Arduino-Paradigma (setup vs. loop) ist auch nicht eingehalten, die Initialisierungen am Anfang von loop() gehören da nicht hin. Zur Unübersichtlichkeit: Deswegen ist es wohl auch passiert, dass der Programmierer selbst nicht gemerkt hat, dass die Variablen dipkey_status zwar ausgelesen, ihr aber im gesamten Programm nirgendwo ein Wert zugewiesen wird. Läuft das Programm denn so überhaupt richtig?
Ralph S. schrieb: > Dass man "Potentiometer" jetzt mit "z" schreibt.... tut nicht nur dir > weh. Das ist ein Fachwort und darf deshalb laut Duden weiterhin mit 't' geschrieben werden. (Ich schreibe das auch mit 't'.)
Ralph S. schrieb: > Diese Schularbeit wurde - mir komplett unverständlich - mit einer 3,2 > bewertet Vielleicht weil die Urheberschaft der dafür genutzten KI nicht mit angegeben wurde?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.